入门
使用你最喜欢的包管理器安装 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 意识
如果未设置为其他值,Jest 会将 process.env.NODE_ENV
设置为 'test'
。 你可以在配置中使用它来有条件地仅设置 Jest 所需的编译,例如
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 配置,babel-jest
会自动转换文件。 为了避免这种行为,你可以显式重置 transform
配置选项:
module.exports = {
transform: {},
};
使用 Webpack
Jest 可用于使用 webpack 管理资源、样式和编译的项目。 与其他工具相比,webpack 确实带来了一些独特的挑战。 请参阅 Webpack 指南 开始。
使用 Vite
Jest 可用于使用 vite 通过原生 ESM 提供源代码的项目,以提供一些前端工具,vite 是一个有态度的工具,并且确实提供了一些开箱即用的工作流程。 由于 vite 的 插件系统 工作方式,vite 不完全支持 Jest,但是有一些使用 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
和 mock functions
的附加使用文档。
或者你可以选择安装 @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
是理想的选择。