Jest 提供了多个生命周期钩子函数来管理测试的设置和清理:
beforeAll:
- 在当前测试套件的所有测试运行之前执行一次
- 适用于一次性设置,如数据库连接
- 示例:
beforeAll(() => { connectDatabase(); });
afterAll:
- 在当前测试套件的所有测试运行之后执行一次
- 适用于清理资源,如关闭数据库连接
- 示例:
afterAll(() => { disconnectDatabase(); });
beforeEach:
- 在当前测试套件的每个测试运行之前执行
- 适用于每个测试的独立设置,如重置状态
- 示例:
beforeEach(() => { resetState(); });
afterEach:
- 在当前测试套件的每个测试运行之后执行
- 适用于每个测试的清理,如清除 Mock
- 示例:
afterEach(() => { jest.clearAllMocks(); });
作用域:
- 钩子函数在定义的
describe块内生效 - 嵌套的
describe会继承父级钩子 - 可以在多个层级定义钩子
示例:
javascriptdescribe('User API', () => { beforeAll(() => setupServer()); afterAll(() => teardownServer()); beforeEach(() => { jest.clearAllMocks(); }); test('should create user', () => { /* ... */ }); test('should get user', () => { /* ... */ }); });
最佳实践:
- 使用
beforeEach和afterEach确保测试隔离 - 使用
beforeAll和afterAll优化性能 - 在
afterEach中清理 Mock 和定时器 - 保持钩子函数简单,避免复杂逻辑