首页 > 解决方案 > 在 Mocha 中的 Before Hook 之前执行 BeforeEach Hook

问题描述

我想创建一个在beforeEachHook 之前执行的beforeHook。

基本上我想要以下行为:

beforeEach(() => {
  console.log('beforeEach')
})

describe('tests', () => {
  before(() => {
    console.log('before')
  })

  it('test 1', () => {
    console.log('it')
  })
})

我得到:

before
beforeEach
it

但我想要的输出是:

beforeEach
before
it

获得所需行为的正确结构是什么?

解决方法

目前,我找到了使用两个嵌套 beforeEach 的解决方法:

beforeEach(() => {
  console.log('beforeEach1')
})

describe('tests', () => {
  beforeEach(() => {
    console.log('beforeEach2')
  })

  it('test 1', () => {
    console.log('it')
  })
})

哪个输出是:

beforeEach1
beforeEach2
it

标签: javascriptnode.jsmocha.js

解决方案


我不确定这一点(我还没有测试过),但从文档看来,你的根级别beforeEach可能没有按照你的想法做。

...
run spec file/s
  |
  |--------------> per spec file
    suite callbacks (e.g., 'describe')
    |
    'before' root-level pre-hook
    |
    'before' pre-hook
    |
    |--------------> per test
      'beforeEach' root-level pre-hook
      |
      'beforeEach' pre-hook
      ...

从上图中,您可以看到每个describebefore级别的 pre-hook 都被调用。只需将您的根级别转换beforeEach为 abefore即可解决。

一般规则是before回调总是出现在回调“之前”(没有双关语)beforeEach,独立于它们定义的级别。


推荐阅读