关于 Jest
Jest 是一个开箱即用的 JavaScript 测试框架,内置断言库、模拟工具和覆盖率报告。通过 npx jest 运行测试,支持快照测试以验证输出的一致性,可生成详细的代码覆盖率报告。
主要功能
- 01运行 JavaScript 单元测试并提供详细的失败输出
- 02使用快照测试验证 UI 组件和对象结构的一致性
- 03生成代码覆盖率报告,识别未测试的代码路径
- 04内置模拟和间谍功能,无需额外依赖
适用场景
- 01编码 Agent 自动化测试套件验证和代码质量检查
- 02在持续集成流程中运行单元测试和生成覆盖率报告
- 03确保重构后代码行为保持一致性
安装
选择你的系统或包管理器,复制命令到终端运行。
安装完成后运行jest --version确认安装成功。
命令示例
常用命令按使用顺序排列。
详细介绍

🃏 令人愉悦的 JavaScript 测试
👩🏻💻 开发者开箱即用:全面的 JavaScript 测试解决方案。适用于大多数 JavaScript 项目,无需额外配置。
🏃🏽 即时反馈:快速、交互式的监视模式,仅运行与已更改文件相关的测试文件。
📸 快照测试:捕获大型对象的快照,以简化测试并分析它们随时间的变化。
了解详情,请访问 jestjs.io
目录
快速入门
使用 yarn 安装 Jest:
yarn add --dev jest
或者使用 npm:
npm install --save-dev jest
注意:Jest 文档使用 yarn 命令,但 npm 同样适用。你可以在 yarn 文档的此处比较 yarn 和 npm 命令。
让我们编写一个测试,来测试一个假想的、用于将两个数字相加的函数。首先,创建一个 sum.js 文件:
function sum(a, b) {
return a + b;
}
module.exports = sum;
然后,创建一个名为 sum.test.js 的文件。这里将包含实际的测试:
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
将以下部分添加到你的 package.json:
{
"scripts": {
"test": "jest"
}
}
最后,运行 yarn test 或 npm test,Jest 将打印以下消息:
PASS ./sum.test.js
✓ adds 1 + 2 to equal 3 (5ms)
你已经成功使用 Jest 编写了第一个测试!
此测试使用 expect 和 toBe 来检验两个值是否完全相同。若要了解 Jest 还可以测试哪些内容,请参阅使用匹配器。
通过命令行运行
你可以直接从 CLI 运行 Jest(如果它已在 PATH 中全局可用,例如通过 yarn global add jest 或 npm install jest --global 安装),并使用各种实用选项。
下面介绍如何对匹配 my-test 的文件运行 Jest,使用 config.json 作为配置文件,并在运行结束后显示原生操作系统通知:
jest my-test --notify --config=config.json
若要进一步了解如何通过命令行运行 jest,请参阅 Jest CLI 选项页面。
其他配置
生成基本配置文件
Jest 会根据你的项目向你提出几个问题,并创建一个基本配置文件,为每个选项附上简短说明:
yarn create jest
使用 Babel
若要使用 Babel,请通过 yarn 安装所需依赖:
yarn add --dev babel-jest @babel/core @babel/preset-env
在项目根目录下创建 babel.config.js 文件,将 Babel 配置为以当前版本的 Node 为目标:
// babel.config.js
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
Babel 的理想配置取决于你的项目。详情请参阅 Babel 文档。
让 Babel 配置适配 Jest
如果 process.env.NODE_ENV 未设置为其他值,Jest 会将其设为 'test'。你可以在配置中使用该值,有条件地只设置 Jest 所需的编译配置,例如:
// babel.config.js
module.exports = api => {
const isTest = api.env('test');
// You can use isTest to determine what presets and plugins to use.
return {
// ...
};
};
注意:安装 Jest 时会自动安装
babel-jest。如果项目中存在 Babel 配置,它会自动转换文件。若要避免此行为,可以显式重置transform配置选项:
// jest.config.js
module.exports = {
transform: {},
};
使用 webpack
Jest 可用于使用 webpack 管理资源、样式和编译的项目。与其他工具相比,webpack 确实会带来一些独特的挑战。请参阅 webpack 指南以开始使用。
使用 Vite
Jest 可用于使用 vite 通过原生 ESM 提供源代码,以支持一些前端工具的项目。vite 是一款固执己见的工具,也提供了一些开箱即用的工作流。由于 vite 的插件系统的工作方式,Jest 尚未获得 vite 的全面支持;不过,也有一些使用 vite-jest 实现 Jest 一流集成的可用示例。由于支持尚不完整,你可能还需要阅读 vite-jest 的限制。请参阅 vite 指南以开始使用。
使用 Parcel
Jest 可用于使用 parcel-bundler 管理资源、样式和编译的项目,方式与 webpack 类似。Parcel 无需任何配置。请参阅官方文档以开始使用。
使用 TypeScript
Jest 通过 Babel 支持 TypeScript。首先,请确保你已按照上文使用 Babel中的说明进行操作。接下来,通过 yarn 安装 @babel/preset-typescript:
yarn add --dev @babel/preset-typescript
然后将 @babel/preset-typescript 添加到 babel.config.js 中的预设列表。
// babel.config.js
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
+ '@babel/preset-typescript',
],
};
不过,使用 Babel 和 TypeScript 时有一些注意事项。由于 Babel 对 TypeScript 的支持仅限于转译,Jest 在运行测试时不会进行类型检查。如果需要类型检查,可以改用 ts-jest,也可以单独运行 TypeScript 编译器 tsc(或将其作为构建流程的一部分)。
文档
了解更多关于如何使用 Jest 的信息,请访问官方网站!
徽章
[](https://github.com/jestjs/jest)
[](https://github.com/jestjs/jest)
[](https://github.com/jestjs/jest)
贡献
Jest 的开发在 GitHub 上公开进行。我们感谢社区为修复 Bug 和改进项目所做的贡献。阅读下文,了解如何参与改进 Jest。
行为准则
Facebook 已采用行为准则,并期望项目参与者遵守。请阅读完整文本,了解哪些行为会被容忍,哪些不会。
贡献指南
阅读我们的贡献指南,了解我们的开发流程、如何提出 Bug 修复和改进建议,以及如何构建和测试你对 Jest 所做的更改。
适合新手的议题
为了帮助你熟悉我们的贡献流程,我们整理了一份适合新手的议题列表,其中包含范围相对有限的 Bug。这是很好的入门方式。
鸣谢
本项目的存在离不开所有贡献者。
支持者
感谢所有支持者!🙏
赞助商
成为赞助商,为本项目提供支持。你的徽标会显示在这里,并附上指向你网站的链接。
许可证
Jest 采用 MIT 许可证。
版权
Jest 项目贡献者版权所有。