beforeeach 是测试框架中在每个 test 执行前自动运行初始化逻辑的钩子,用于重置状态、创建 mock、准备数据等;支持同步与异步操作,作用域限于所在 describe 块,比 beforeall 更适合保障测试隔离性。

beforeEach 是 Jest、Jasmine、Vitest 等测试框架提供的生命周期钩子,用于在每个 test(或 it)执行前自动运行一段初始化逻辑,比如重置状态、创建模拟对象、准备测试数据等。
基本用法:在每个测试前设置共享数据
你可以在 describe 块内使用 beforeEach,为该块下所有测试统一准备初始环境:
describe('用户管理功能', () => {
let userData;
beforeEach(() => {
// 每个 test 执行前都会重新赋值,避免测试间污染
userData = {
id: 1,
name: '张三',
email: 'zhangsan@example.com'
};
});
test('用户名应为字符串', () => {
expect(typeof userData.name).toBe('string');
});
test('邮箱应包含 @ 符号', () => {
expect(userData.email).toContain('@');
});
});
配合 mock 或状态重置使用
真实项目中常需清理副作用。例如重置模块的 mock、清空 localStorage、还原被修改的全局变量:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 重置 mock 函数调用记录:
jest.clearAllMocks() - 清空 localStorage:
localStorage.clear() - 还原被 spyOn 的方法:
jest.restoreAllMocks() - 重置 Redux store(若用测试专用 store):
store.dispatch(resetAction())
注意作用域和异步初始化
beforeEach 支持异步操作,只需返回 Promise 或使用 async/await:
beforeEach(async () => {
// 等待 API mock 数据加载完成
await fetchMock.reset();
fetchMock.mockResponseOnce(JSON.stringify({ success: true }));
});
⚠️ 注意:确保 beforeEach 中的异步操作真正完成后再进入测试;否则可能因竞态导致断言失败。
与 beforeAll 的区别
beforeAll 只运行一次(整个 describe 开始前),适合开销大的一次性准备(如启动测试服务器);beforeEach 更安全,保证每个测试从干净、一致的状态开始,是初始化测试数据的首选方式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










