Jest - 配置
在本章中,我们将介绍如何配置 Jest以实现最佳测试。我们将介绍配置文件、命令行选项以及如何生成代码覆盖率报告。
Jest 配置文件
Jest 在其默认设置下运行良好,但有时需要自定义。您可以使用专用文件(如 jest.config.js、jest.config.ts、jest.config.json 或其他受支持的格式)配置 Jest。 Jest 将自动检测此文件,或者您可以使用 --config 标志 指定自定义路径。
配置 Jest 的方法
Jest 配置可以通过三种主要方式完成:
- 专用配置文件(jest.config.js、jest.config.ts 等)。
- 在 package.json 内
- 一次性配置的命令行参数。
示例配置
以下是 jest.config.js 文件的简单示例:
module.exports = { // 指定环境(例如, 'node' 表示服务器端) testEnvironment: 'node', // 启用详细测试输出 verbose: true, // 查找测试文件的模式 testMatch: ['**/?(*.)+(spec|test).js'], // 支持的文件类型 moduleFileExtensions: ['js', 'json', 'jsx', 'ts', 'tsx'] };
moduleFileExtensions 数组定义 Jest 将识别的文件类型:
- js: JavaScript 文件。
- json: JSON 文件。
- jsx: React JavaScript 文件。
- ts: TypeScript 文件。
- tsx: TypeScript React 文件。
Jest - CLI 选项
Jest 还提供了几个 命令行界面 (CLI) 选项,允许您自定义 Jest 直接从终端运行的方式。
Jest 中的常见 CLI 选项
以下是一些最常用的 Jest CLI 选项:
命令 | 功能 |
---|---|
--coverage | 生成代码覆盖率报告,显示代码测试量。 |
--watch | 在监视模式下运行 Jest,当文件更改时自动重新运行测试。 |
--verbose | 显示有关每个单独测试结果的详细信息。 |
--testNamePattern=<pattern> | 仅运行名称与提供的模式匹配的测试。例如,jest --testNamePattern="button"。 |
--maxWorkers=<number> | 限制 Jest 用于运行测试的工作进程数量,以优化性能。 |
--runInBand | 按顺序运行所有测试(用于调试或测试有副作用时)。 |
如何在 Jest 中使用 CLI 选项?
要使用这些选项中的任何一个,您只需在通过终端运行 Jest 时传递它们即可。 例如,要生成代码覆盖率报告并显示每个测试的详细结果,您可以使用以下命令:
npm test -- --coverage --verbose
示例命令
这是一个使用多个选项运行 Jest 的示例:
jest --coverage --watch --verbose
此命令:
- --coverage:收集代码覆盖率数据。
- --watch:在监视模式下运行 Jest,当文件更改时自动重新运行测试。
- --verbose:显示每个单独的详细测试结果测试。
Jest - 代码覆盖率报告
Jest 可以自动收集代码覆盖率数据,显示测试套件测试了多少代码。它会在您运行测试时生成覆盖率报告,并支持不同的格式。
启用代码覆盖率
要在 Jest 中启用代码覆盖率,您可以在配置文件中设置 collectCoverage 选项,也可以在命令行中使用 --coverage 标志。
在配置文件 (jest.config.js) 中:
module.exports = { collectCoverage: true, };
使用 CLI 标志:
npx jest --coverage
在启用代码覆盖率的情况下运行 Jest 时,它将在终端中生成覆盖率报告并将其存储在指定的 coverageDirectory(例如 coverage/)中。
覆盖率报告格式
默认情况下,Jest 会以以下格式生成覆盖率报告:
- text:在终端中显示覆盖率。
- html:在 coverage/lcov-report 目录中生成 HTML 报告。
- lcov:创建详细的 lcov 报告(适用于与 Coveralls 或Codecov)。
- json:输出包含覆盖率信息的 JSON 文件。
您可以在配置中自定义覆盖率报告格式:
module.exports = { collectCoverage: true, coverageReporters: ['text', 'html', 'lcov'], };
覆盖率输出
一旦 Jest 在启用覆盖率的情况下完成测试运行,它将在终端中输出一份摘要,其中包括:
- 语句:测试覆盖的语句百分比。
- 分支:代码分支(if-else、循环)覆盖的百分比。
- 函数:函数覆盖的百分比。
- 行:行覆盖的百分比。
示例输出可能如下所示:
Statements : 87.6% ( 92/105 ) Branches : 75% ( 3/4 ) Functions : 100% ( 5/5 ) Lines : 87.6% ( 92/105 )
设置覆盖率阈值
您可以使用 Jest 配置文件中的 coverageThreshold 选项在 Jest 中设置最小覆盖率百分比(例如,语句、分支、函数)。
示例配置:
module.exports = { collectCoverage: true, coverageThreshold: { global: { statements: 80, branches: 75, functions: 90, lines: 85, }, }, };
如果覆盖率低于这些数字,Jest 将测试失败并输出包含详细信息的消息。