跳至主要内容
版本: 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

如果 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 {
// ...
};
};
注意

babel-jest 在安装 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

通过 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.each模拟函数 的其他使用文档。

或者,您可以选择安装 @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 是理想的选择。

使用 ESLint

只要您在测试文件中使用它们之前从 @jest/globals 导入 Jest 全局帮助程序describeit 等),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
}
}
]
}