入门
使用您喜欢的包管理器安装 Jest
- npm
- Yarn
- pnpm
npm install --save-dev jest
yarn add --dev jest
pnpm add --save-dev jest
让我们从为一个假设的函数编写测试开始,该函数将两个数字相加。首先,创建一个名为 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 会问您一些问题,并创建一个基本配置文件,其中包含每个选项的简短描述
- npm
- Yarn
- pnpm
npm init jest@latest
yarn create jest@latest
pnpm create jest@latest
使用 Babel
要使用 Babel,请安装所需的依赖项
- npm
- Yarn
- pnpm
npm install --save-dev babel-jest @babel/core @babel/preset-env
yarn add --dev babel-jest @babel/core @babel/preset-env
pnpm add --save-dev babel-jest @babel/core @babel/preset-env
通过在项目的根目录中创建一个 babel.config.js
文件,将 Babel 配置为针对您当前的 Node 版本
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
Babel 的理想配置将取决于您的项目。有关更多详细信息,请参阅 Babel 的文档。
使您的 Babel 配置支持 Jest
如果 process.env.NODE_ENV
未设置为其他值,Jest 将将其设置为 'test'
。您可以在配置中使用它来有条件地仅设置 Jest 所需的编译,例如
module.exports = api => {
const isTest = api.env('test');
// You can use isTest to determine what presets and plugins to use.
return {
// ...
};
};
babel-jest
在安装 Jest 时会自动安装,如果您的项目中存在 babel 配置,它会自动转换文件。要避免此行为,您可以显式重置 transform
配置选项
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
通过 babel
Jest 通过 Babel 支持 TypeScript。首先,确保您已按照上述 使用 Babel 的说明进行操作。接下来,安装 @babel/preset-typescript
- npm
- Yarn
- pnpm
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
然后将 @babel/preset-typescript
添加到 babel.config.js
中的预设列表中。
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
但是,使用 Babel 与 TypeScript 存在一些 注意事项。由于 Babel 中的 TypeScript 支持纯粹是转译,因此 Jest 不会在运行测试时对测试进行类型检查。如果您需要类型检查,可以使用 ts-jest,或者单独运行 TypeScript 编译器 tsc(或作为构建过程的一部分)。
通过 ts-jest
ts-jest 是一个带有源映射支持的 TypeScript 预处理器,用于 Jest,它允许您使用 Jest 测试用 TypeScript 编写的项目。
- npm
- Yarn
- pnpm
npm install --save-dev ts-jest
yarn add --dev ts-jest
pnpm add --save-dev ts-jest
为了让 Jest 使用 ts-jest
转译 TypeScript,您可能还需要创建一个 配置文件。
类型定义
有两种方法可以为用 TypeScript 编写的测试文件键入 Jest 全局 API。
您可以使用随 Jest 一起提供的类型定义,这些类型定义将在每次更新 Jest 时更新。安装 @jest/globals
包
- npm
- Yarn
- pnpm
npm install --save-dev @jest/globals
yarn add --dev @jest/globals
pnpm add --save-dev @jest/globals
并从其中导入 API
import {describe, expect, test} from '@jest/globals';
import {sum} from './sum';
describe('sum module', () => {
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
});
请参阅 describe.each
/test.each
和 模拟函数
的其他使用文档。
或者,您可以选择安装 @types/jest
包。它为 Jest 全局变量提供类型,无需导入它们。
- npm
- Yarn
- pnpm
npm install --save-dev @types/jest
yarn add --dev @types/jest
pnpm add --save-dev @types/jest
@types/jest
是一个由 DefinitelyTyped 维护的第三方库,因此最新的 Jest 功能或版本可能尚未涵盖。尝试尽可能匹配 Jest 和 @types/jest
的版本。例如,如果您使用的是 Jest 27.4.0
,那么安装 27.4.x
的 @types/jest
是理想的选择。
使用 ESLint
只要您在测试文件中使用它们之前从 @jest/globals
导入 Jest 全局帮助程序(describe
、it
等),Jest 就可以与 ESLint 一起使用,无需任何其他配置。这是为了避免来自 ESLint 的 no-undef
错误,ESLint 不了解 Jest 全局变量。
如果您想避免这些导入,您可以配置您的 ESLint 环境 以支持这些全局变量,方法是添加 jest
环境
{
"overrides": [
{
"files": ["tests/**/*"],
"env": {
"jest": true
}
}
]
}
或者使用 eslint-plugin-jest
,它具有类似的效果
{
"overrides": [
{
"files": ["tests/**/*"],
"plugins": ["jest"],
"env": {
"jest/globals": true
}
}
]
}