Jest for TypeScript:完整测试指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Jest,为什么它对 TypeScript 是必需的?

Jest 是一个强大且流行的 JavaScript 和 TypeScript 测试框架,由 Meta(Facebook)公司开发。它提供了编写单元测试、集成测试和快照测试所需的一切“开箱即用”功能:断言库、模拟(mocks)、间谍(spies)、计时器和代码覆盖率。对于 TypeScript 来说,Jest 尤其有价值,因为它允许在测试执行期间检查类型,从而提高了代码的可靠性。将 Jest 与 TypeScript 结合使用,可以帮助开发者更快地发现错误,自信地重构代码,并保持项目的高质量。

安装与配置

首先,通过 npm 或 yarn 安装 Jest 及其所需的类型:

npm install --save-dev jest @types/jest ts-jest typescript

然后,初始化 Jest 配置:

npx ts-jest config:init

这将创建一个包含 TypeScript 设置的 jest.config.js 文件。确保在 tsconfig.json 中设置了 "module": "commonjs",或者使用 ts-node 来处理 ESM。

主要功能

  • describe 和 it/test — 用于分组和编写测试。
  • expect — 断言函数,包含多种匹配器(toBe、toEqual、toContain、toThrow 等)。
  • beforeEach / afterEach — 用于准备和清理环境的钩子。
  • jest.mock — 自动模拟模块。
  • jest.spyOn — 监视函数调用。
  • 快照测试 — 比较组件输出。
  • 代码覆盖率 — 内置的 --coverage 工具。

TypeScript 代码示例

// math.tsexport const add = (a: number, b: number): number => a + b;export const divide = (a: number, b: number): number => {  if (b === 0) throw new Error('Division by zero');  return a / b;};

// math.test.tsimport { add, divide } from './math';

describe('Math functions', () => { test('adds two numbers correctly', () => { expect(add(2, 3)).toBe(5); expect(add(-1, 1)).toBe(0); });

test('throws error when dividing by zero', () => { expect(() => divide(10, 0)).toThrow('Division by zero'); });

test('divides correctly', () => { expect(divide(10, 2)).toBe(5); expect(divide(9, 3)).toBeCloseTo(3); });});

何时使用 Jest 与 TypeScript?

  • 任何 TypeScript 项目 — 从小型库到大型应用程序。
  • 使用 TDD 开发 — Jest 非常适合在实现之前编写测试。
  • 重构 — 确保更改不会破坏现有逻辑。
  • CI/CD 流水线 — 快速运行测试并检查覆盖率。
  • 测试 React 组件 — 结合 @testing-library/react 使用。

Jest 是测试 TypeScript 的事实标准,这得益于其简单的配置、丰富的 API 以及与现代化工具的出色集成。

推荐