信息发布→ 登录 注册 退出

j*ascript测试如何进行_如何使用Jest编写单元测试?

发布时间:2025-12-13

点击量:
Jest 是 J*aScript 单元测试最常用、上手最友好的方案,开箱即用,自带断言库、Mock 工具、覆盖率报告和测试运行器;支持 ES Module,需配置 jest.config.js;通过 test() 和 expect().matcher 编写测试,可模拟依赖、验证异步逻辑。

javascript测试如何进行_如何使用jest编写单元测试?

J*aScript 单元测试最常用、上手最友好的方案就是 Jest。它开箱即用,自带断言库、Mock 工具、覆盖率报告和测试运行器,不需要额外配置就能跑起来。

安装与基础配置

在项目根目录下执行:

npm install --s*e-dev jest

package.jsonscripts 中添加:

"test": "jest",<br>"test:watch": "jest --watch"

如果项目使用 ES Module(比如有 type: "module"),需在 jest.config.js 中启用 ESM 支持(Jest 29+ 原生支持):

export default {<br>  testEnvironment: 'node',<br>  extensionsToTreatAsEsm: ['.ts', '.js'],<br>  transform: {<br>    '^.+\.js$': ['babel-jest', { presets: ['@babel/preset-env'] }],<br>  },<br>};

编写第一个测试文件

Jest 默认匹配 *.test.js*.spec.js 文件。比如你有一个 math.js

// math.js<br>export const add = (a, b) => a + b;<br>export const multiply = (a, b) => a * b;

对应写一个 math.test.js

// math.test.js<br>import { add, multiply } from './math.js';<br><br>test('add returns correct sum', () => {<br>  expect(add(2, 3)).toBe(5);<br>});<br><br>test('multiply returns correct product', () => {<br>  expect(multiply(4, 5)).toBe(20);<br>});

运行 npm test 就能看到通过结果。

拾贝 拾贝

一键同步微信读书所有笔记和划线,并在新标签页回顾

拾贝 186 查看详情 拾贝

常用断言与测试技巧

Jest 提供丰富的 expect().matcher 方法,覆盖大多数验证场景:

  • toBe():严格相等(适合原始值)
  • toEqual():深度相等(适合对象、数组)
  • toBeTruthy() / toBeFalsy():检查真值/假值
  • toThrow():验证是否抛出错误
  • toH*eBeenCalledTimes():配合 jest.fn() 检查函数调用次数

例如测试异步函数:

test('fetches user data', async () => {<br>  const userData = await fetchUser(123);<br>  expect(userData.name).toBe('Alice');<br>});

或者用 await expect(...).resolves 更安全地捕获 Promise 成功结果。

模拟依赖(Mocking)

测试时经常要隔离外部影响,比如 API 调用、定时器或第三方库。Jest 内置强大 Mock 功能:

  • jest.fn() 创建模拟函数,可记录调用、返回固定值或抛错
  • jest.mock('./module') 自动 mock 模块(会自动替换其所有导出)
  • jest.useFakeTimers() 替换 setTimeout 等,让时间控制可控

例子:mock 一个发请求的函数

import { fetchData } from './api.js';<br><br>jest.mock('./api.js'); // 自动 mock<br><br>test('shows loading then data', () => {<br>  fetchData.mockResolvedValue({ id: 1, name: 'Bob' });<br>  // ...触发组件逻辑<br>  expect(fetchData).toH*eBeenCalledTimes(1);<br>});

基本上就这些。Jest 不复杂但容易忽略细节,比如默认不支持顶层 await、ESM 导入路径别名需要额外配置。从简单函数开始写,逐步覆盖分支逻辑和副作用,测试就会自然成为开发节奏的一部分。

以上就是j*ascript测试如何进行_如何使用Jest编写单元测试?的详细内容,更多请关注其它相关文章!


相关文章: J*a应用集成GitHub CLI与API认证指南  理解Python模块与全局变量的作用域管理  现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践  QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口  c++项目目录结构应该如何组织_c++工程化项目结构规范  将PCM16音频数据转换为W*并编码为Base64教程  Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  网站内容防复制粘贴的实现策略与局限性  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  抖音网页版企业服务中心登录入口_抖音网页版企业登录平台  多闪网页版在线观看免费入口_多闪官网访问入口  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  解决Flask中Quill编辑器内容提交失败及TypeError的指南  品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程  痛风发作了怎么办? 快速止痛和后期饮食调理  58动漫网在线官方网 58动漫网正版动漫入口网址  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  j*a toString()的覆盖  HTML空白字符处理机制:渲染、DOM与编码实践  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】  利用Bokeh CustomJS动态控制DataTable列可见性  如何配置Composer的PSR-4自动加载_Composer自动加载命名空间映射实践教程  解决PHP会话Cookie在跨域请求中不保留的问题  学习通网页版官方登录 超星学习通电脑端入口指南  Kafka Streams中基于消息头条件过滤消息的实现指南  AngularJS $http POST请求数据传递与Go后端接收实践  期待已久:小米17 Ultra、小米首款NAS本月登场  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  C++如何跨平台操作文件和目录_C++17标准库std::filesystem的使用教程  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  J*aScript数据结构转换:将对象数组按类别分组  解决移动端滚动问题的overflow属性应用指南  Golang如何使用new_Go new分配内存机制讲解  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容  Web Components中自定义开关组件状态同步的常见陷阱与解决方案  CSS子选择器:如何区分并样式化嵌套列表的子层级  在VS Code中配置和运行Dart程序的完整步骤  LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比  qq游戏跨平台入口_qq游戏多设备同步登录  照顾宝贝2小游戏点击立即在线玩  excel怎么制作工资条 excel快速生成工资条的方法  Django表单验证失败时保留用户输入数据的最佳实践  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理  J*a TimerTask中HashMap意外清空的深层原因与解决方案 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!