乐闻世界logo
搜索文章和话题

Jest 中的生命周期钩子有哪些?beforeAll、afterAll、beforeEach 和 afterEach 如何使用?

2月21日 15:57

Jest 提供了多个生命周期钩子函数来管理测试的设置和清理:

beforeAll:

  • 在当前测试套件的所有测试运行之前执行一次
  • 适用于一次性设置,如数据库连接
  • 示例:beforeAll(() => { connectDatabase(); });

afterAll:

  • 在当前测试套件的所有测试运行之后执行一次
  • 适用于清理资源,如关闭数据库连接
  • 示例:afterAll(() => { disconnectDatabase(); });

beforeEach:

  • 在当前测试套件的每个测试运行之前执行
  • 适用于每个测试的独立设置,如重置状态
  • 示例:beforeEach(() => { resetState(); });

afterEach:

  • 在当前测试套件的每个测试运行之后执行
  • 适用于每个测试的清理,如清除 Mock
  • 示例:afterEach(() => { jest.clearAllMocks(); });

作用域:

  • 钩子函数在定义的 describe 块内生效
  • 嵌套的 describe 会继承父级钩子
  • 可以在多个层级定义钩子

示例:

javascript
describe('User API', () => { beforeAll(() => setupServer()); afterAll(() => teardownServer()); beforeEach(() => { jest.clearAllMocks(); }); test('should create user', () => { /* ... */ }); test('should get user', () => { /* ... */ }); });

最佳实践:

  • 使用 beforeEachafterEach 确保测试隔离
  • 使用 beforeAllafterAll 优化性能
  • afterEach 中清理 Mock 和定时器
  • 保持钩子函数简单,避免复杂逻辑
标签:Jest