Javascript 在摩卡咖啡中,在每个钩子之前执行钩子

Javascript 在摩卡咖啡中,在每个钩子之前执行钩子,javascript,node.js,mocha.js,Javascript,Node.js,Mocha.js,我想在每个钩子之前创建一个钩子,该钩子在钩子之前执行 基本上,我想要以下行为: beforeEach(() => { console.log('beforeEach') }) describe('tests', () => { before(() => { console.log('before') }) it('test 1', () => { console.log('it') }) }) 我得到: before before

我想在每个钩子之前创建一个钩子,该钩子在钩子之前执行

基本上,我想要以下行为:

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

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

  it('test 1', () => {
    console.log('it')
  })
})
我得到:

before
beforeEach
it
但我想要的结果是:

beforeEach
before
it
获得所需行为的正确结构是什么

解决方法

目前,我发现了一个解决方法,使用两个嵌套的beforeach:

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

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

  it('test 1', () => {
    console.log('it')
  })
})
哪个输出是:

beforeEach1
beforeEach2
it
可以使用包含beforeach()和descripe()的descripe()

像这样的

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

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

     it('test 1, () => {
       console.log('it')
     })
   })
}
我不确定这一点(我还没有测试过),但从测试结果来看,您的根级别在每次测试之前可能都不符合您的想法

...
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
      ...
从上图中,您可以看到,对于每个
descripe
调用根级前钩子之前的
。只需在每个
之前在之前的中旋转根级别,就可以解决这个问题


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

谢谢,不幸的是,我得到了相同的行为:
beforeach>它
摩卡有一个隐含的
descripe
块。这样你只添加了一个空关卡。谢谢,我确实检查了文档。问题是,我需要一个应该为每个测试执行的通用beforeach(创建每个测试所需的通用数据库模式)。每个测试都有一个特定的“before”,用于在数据库中设置不同的情况。您描述了您使用“变通方法”所做的工作,为什么它在您的情况下不正确?或者我遗漏了什么?因为beforeach2应该在单个测试之前执行一次(这个测试非常简单,但可能存在其他更复杂的测试)。另外,对于其他贡献者来说,语法也很混乱。我认为它会为我的案例提供一个清晰正确的结构,你不必担心混淆其他贡献者。这是摩卡开发者选择遵循的逻辑,你完全坚持它,没有更清晰的解决方案。您自己解决了。最终找到了类似的问题,并提供了更多详细信息:。似乎真的很有限