Jest - JavaScript 测试框架完整指南 #
简介 #
Jest 是由 Facebook(现 Meta)开发的 JavaScript 测试框架,专注于简洁性和性能。它是一个"零配置"的测试平台,开箱即用,无需复杂设置即可开始编写测试。
核心特点 #
- 零配置 - 开箱即用,无需复杂配置
- 快照测试 - 革命性的 UI 测试方式
- 并行执行 - 自动并行运行测试
- 内置覆盖率 - 无需额外工具
- 优秀的 Watch 模式 - 智能监听文件变化
- 强大的 Mock 功能 - 内置 Mock 支持
学习路径 #
text
入门阶段
├── Jest 简介
├── 安装与配置
├── 基础测试
├── 断言匹配器
└── 测试生命周期
进阶阶段
├── 异步测试
├── Mock 功能
├── 快照测试
├── DOM 测试
└── 代码覆盖率
高级阶段
├── 高级配置
├── 性能优化
├── 调试技巧
└── 扩展与插件
实战阶段
├── React 测试
├── Vue 测试
├── Node.js 测试
└── 最佳实践
文档目录 #
入门篇 #
| 文档 | 描述 |
|---|---|
| Jest 简介 | 了解 Jest 的历史、特点、核心概念 |
| 安装与配置 | Jest 的安装方法、配置选项、TypeScript 支持 |
| 基础测试 | 测试结构、组织方式、命名规范 |
| 断言匹配器 | 各种断言方法,包括相等、布尔、数字、字符串等 |
| 测试生命周期 | beforeAll、afterAll、beforeEach、afterEach 钩子 |
进阶篇 #
| 文档 | 描述 |
|---|---|
| 异步测试 | 回调、Promise、async/await、定时器测试 |
| Mock 功能 | 函数 Mock、模块 Mock、Spy 监视 |
| 快照测试 | UI 组件快照、快照更新、内联快照 |
| DOM 测试 | DOM 查询、用户交互、事件模拟 |
| 代码覆盖率 | 覆盖率收集、报告分析、阈值设置 |
高级篇 #
| 文档 | 描述 |
|---|---|
| 高级配置 | 预设、全局设置、自定义匹配器、多项目配置 |
| 性能优化 | 并行执行、缓存优化、增量测试 |
| 调试技巧 | 断点调试、日志输出、错误分析 |
| 扩展与插件 | 自定义匹配器、报告器、运行器 |
实战篇 #
| 文档 | 描述 |
|---|---|
| React 测试 | React 组件测试、Hooks 测试、Context 测试 |
| Vue 测试 | Vue 组件测试、Vuex/Pinia 测试、Composition API |
| Node.js 测试 | Express/Koa 测试、数据库测试、API 测试 |
| 最佳实践 | 测试原则、代码组织、命名规范、CI/CD 集成 |
快速开始 #
安装 #
bash
npm install --save-dev jest
编写测试 #
javascript
// 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);
});
运行测试 #
bash
npx jest
核心概念 #
测试结构 #
javascript
describe('Calculator', () => {
beforeAll(() => {
// 所有测试之前执行一次
});
beforeEach(() => {
// 每个测试之前执行
});
test('adds numbers', () => {
// 单个测试
});
afterEach(() => {
// 每个测试之后执行
});
afterAll(() => {
// 所有测试之后执行一次
});
});
断言 #
javascript
test('example', () => {
expect(1 + 1).toBe(2);
expect(value).toEqual({ a: 1 });
expect(value).toBeTruthy();
expect(value).toContain('item');
});
Mock #
javascript
// 函数 Mock
const mockFn = jest.fn();
mockFn.mockReturnValue(42);
// 模块 Mock
jest.mock('./axios');
常用命令 #
bash
# 运行所有测试
jest
# 监听模式
jest --watch
# 生成覆盖率
jest --coverage
# 更新快照
jest --updateSnapshot
# 只运行修改的测试
jest --onlyChanged
# 清除缓存
jest --clearCache
适用场景 #
| 场景 | 描述 |
|---|---|
| 单元测试 | 测试独立的函数或模块 |
| 集成测试 | 测试多个模块协作 |
| 组件测试 | 测试 React/Vue 组件 |
| 快照测试 | 确保 UI 不会意外改变 |
| API 测试 | 测试后端 API 端点 |
为什么选择 Jest? #
与其他框架对比 #
| 特性 | Jest | Mocha | Vitest |
|---|---|---|---|
| 零配置 | ✅ | ❌ | ✅ |
| 断言库 | ✅ 内置 | ❌ 需要 chai | ✅ 内置 |
| Mock 功能 | ✅ 内置 | ❌ 需要 sinon | ✅ 内置 |
| 快照测试 | ✅ 内置 | ❌ 不支持 | ✅ 内置 |
| 代码覆盖率 | ✅ 内置 | ❌ 需要额外工具 | ✅ 内置 |
| 生态系统 | ✅ 成熟 | ✅ 成熟 | 🔄 发展中 |
开始学习 #
准备好开始学习 Jest 了吗?从 Jest 简介 开始你的测试之旅!
最后更新:2026-03-28