什么是 Jest,为什么需要它?
Jest 是一个强大且流行的 JavaScript 代码测试框架,由 Facebook (Meta) 开发。它提供了编写单元测试、集成测试和端到端测试所需的一切“开箱即用”功能:用于创建断言 (assertions)、模拟 (mocking)、间谍 (spies)、定时器 (timers) 的工具,以及内置的代码覆盖率 (code coverage) 测量工具。
Jest 在 React 生态系统中被广泛使用,但也非常适合测试任何 JavaScript 代码,包括 Node.js、Angular、Vue.js 及其他框架的应用。
为什么需要 Jest?
- 自动化检查: 允许您在每次更改后快速可靠地检查代码是否正常运行。
- 防止回归: 测试有助于确保新代码不会破坏旧功能。
- 文档: 编写良好的测试可作为活文档,展示每个函数或模块应如何工作。
- 重构信心: 拥有测试可以安全地重写和改进代码。
- 易于配置: Jest “开箱即用”,无需复杂配置。
安装 Jest
Jest 通过包管理器 npm 或 yarn 安装。对于 Node.js 项目,这是标准方式。
# 作为开发依赖安装(推荐)npm install --save-dev jest
# 或使用 yarnyarn add --dev jest安装后,将运行测试的脚本添加到您的 package.json 中:
{ "scripts": { "test": "jest", "test:watch": "jest --watch", // 在监视模式下运行 "test:coverage": "jest --coverage" // 运行并生成覆盖率报告 }}现在您可以使用命令 npm test 运行测试。
快速入门及代码示例
假设我们有一个用于数学运算的简单模块 math.js:
// math.jsfunction add(a, b) { return a + b;}
function subtract(a, b) { return a - b;}
module.exports = { add, subtract };创建一个测试文件 math.test.js(Jest 默认查找扩展名为 .test.js 或 .spec.js 的文件):
// math.test.jsconst { add, subtract } = require('./math');
test('adds 1 + 2 to equal 3', () => { expect(add(1, 2)).toBe(3);});
test('subtracts 5 - 3 to equal 2', () => { expect(subtract(5, 3)).toBe(2);});运行测试:
npm test您将在控制台中看到测试结果报告。如果一切正确,两个测试都将标记为绿色 ✓。
Jest 的主要方法和函数
Jest 提供了丰富的 API。让我们看看 10 个关键方法,它们将覆盖您 90% 的任务。
1. test(name, fn, timeout) / it(name, fn, timeout)
作用: 定义一个新的测试。 test 和 it 是同义词。您可以使用任何一个。
参数:
name(string) — 测试的名称,将显示在报告中。fn(function) — 包含测试逻辑(断言)的函数。timeout(number, 可选) — 测试的超时时间(毫秒),默认为 5000。
示例:
test('two plus two equals four', () => { expect(2 + 2).toBe(4);});
it('string "hello" has length 5', () => { expect('hello').