Skip to main content
Version: 29.7

入门


使用你最喜欢的包管理器安装 Jest:

npm install --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 testnpm test,Jest 将打印以下消息:

PASS  ./sum.test.js
✓ adds 1 + 2 to equal 3 (5ms)

你刚刚使用 Jest 成功编写了第一个测试!

该测试使用 expecttoBe 来测试两个值是否完全相同。 要了解 Jest 可以测试的其他内容,请参阅 使用匹配器

从命令行运行

你可以直接从 CLI 运行 Jest(如果它在 PATH 中全局可用,例如 yarn global add jestnpm install jest --global),并具有各种有用的选项。

以下是如何在匹配 my-test 的文件上运行 Jest,使用 config.json 作为配置文件并在运行后显示原生操作系统通知:

jest my-test --notify --config=config.json

如果你想了解有关通过命令行运行 jest 的更多信息,请查看 Jest CLI 选项 页面。

附加配置

生成基本配置文件

根据你的项目,Jest 会问你几个问题,并创建一个基本配置文件,其中包含每个选项的简短描述:

npm init jest@latest

使用 Babel

要使用 Babel,请安装所需的依赖:

npm install --save-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 意识

如果未设置为其他值,Jest 会将 process.env.NODE_ENV 设置为 '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 配置,babel-jest 会自动转换文件。 为了避免这种行为,你可以显式重置 transform 配置选项:

jest.config.js
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 install --save-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(或作为构建过程的一部分)。

通过 ts-jest

ts-jest 是一个 TypeScript 预处理器,支持 Jest 的源映射,让你可以使用 Jest 测试用 TypeScript 编写的项目。

npm install --save-dev ts-jest

为了让 Jest 使用 ts-jest 转译 TypeScript,你可能还需要创建一个 配置 文件。

类型定义

有两种方法可以为用 TypeScript 编写的测试文件输入 Jest 全局 API

你可以使用 Jest 附带的类型定义,并且每次更新 Jest 时都会更新。 安装 @jest/globals 包:

npm install --save-dev @jest/globals

并从中导入 API:

sum.test.ts
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.eachmock functions 的附加使用文档。

或者你可以选择安装 @types/jest 软件包。 它为 Jest 全局变量提供类型,无需导入它们。

npm install --save-dev @types/jest
信息

@types/jest 是在 DefinitelyTyped 维护的第三方库,因此可能尚未涵盖最新的 Jest 功能或版本。 尝试尽可能匹配 Jest 和 @types/jest 的版本。 例如,如果你使用 Jest 27.4.0,那么安装 27.4.x@types/jest 是理想的选择。