在Mocha中执行“先钩后钩”之前

时间:2019-05-28 15:14:45

标签: javascript node.js mocha

我想创建一个在beforeEach钩之前执行的before钩。

基本上我想要以下行为:

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

2 个答案:

答案 0 :(得分:1)

我不确定这一点(我尚未测试),但是从doc看来,您的根级别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
      ...

从上图可以看到,每个describe的{​​{1}}根级预钩都被调用。只需将根级别的before放在beforeEach中,就可以解决此问题。

一般规则是,before回调总是在before回调之前(而不是双关语)出现,与定义的级别无关。

答案 1 :(得分:0)

您可以使用内部具有beforeEach()和describe()的describe()。

类似这样的东西

describe ('A blah component', () => 
{
  beforeEach(() => {
    console.log('beforeEach')
  })

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

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