You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular(Jasmine)单元测试:beforeEach()是否会在每个内层describe前执行?

关于Jest中beforeEach()的执行时机解答

嘿,这个问题我太熟悉啦!咱们结合你给出的代码来拆解清楚:

首先明确Jest里beforeEach()的核心规则:它的触发时机是每一个it()(或test())测试块运行之前,而不是在describe块声明/执行的时候——哪怕是内层的describe也不会触发它,只有真正的测试用例才会。

针对你提供的代码结构:

describe('outer describe',()=>{ 
  beforeEach(() => { 
    // 这里的逻辑
  }); 
  describe('inner describe1',()=>{ }); 
  describe('inner describe2',()=>{ }); 
  it('First It1',()=>{ }); 
  it('Second It2',()=>{ }); 
});

这个外层的beforeEach()会在以下两个时机执行:

  • 运行it('First It1')测试块之前
  • 运行it('Second It2')测试块之前

至于那两个内层的describe块,因为它们里面没有任何it测试用例,所以beforeEach()完全不会因为这两个describe而触发。如果之后你给内层describe加上测试用例,比如:

describe('inner describe1',()=>{
  it('inner test case', () => {
    // 测试逻辑
  });
});

那外层的beforeEach()也会在这个inner test case运行之前执行一次。

再补充几个关键点帮你理解:

  • beforeEach()的作用域是它所在的describe块,以及所有嵌套在这个块里的子describe块
  • 只有实际运行测试用例的时候才会触发它,分组用的describe本身只是逻辑分组,不会触发钩子函数

内容的提问来源于stack exchange,提问作者Anshita Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:32:23