Mocha 以意外的顺序嵌套运行 beforeEach

Mocha runs nested beforeEach in unexpect order

我有一个使用带有嵌套 describe 和 beforeEach 块的 Mocha 的测试套件。 当我 运行 测试时,我希望外部 beforeEach 在内部 beforeEach

之前 运行

这是一些示例代码

const expect = require('chai').expect

describe('Outer describe', async () => {
  beforeEach(() => {
    console.log('Outer beforeEach is running!!!!');
  });

  afterEach(() => {
    console.log('Outer afterEach is running!!!!');
  });

  it('Outter test', async () => {
    expect(true).to.be.true;
  });

  describe('Inner describe', () => {
    before(() => {
      console.log('Inner beforeEach is running!!!!');
    });

    after(() => {
      console.log('Inner afterEach is running!!!!');
    });

    // only used to simplify the output
    it.only('Inner test', async () => {
      expect(true).to.be.true;
    });
  })
});

他是运行以上测试

的输出
  Outer describe
    Inner describe
Inner beforeEach is running!!!!
Outer beforeEach is running!!!!
      ✓ Inner test
Outer afterEach is running!!!!
Inner afterEach is running!!!!

我期待的是

  Outer describe
    Inner describe
Outer beforeEach is running!!!!
Inner beforeEach is running!!!!
      ✓ Inner test
Inner afterEach is running!!!!
Outer afterEach is running!!!!

这是预期的行为吗? 我的内部 beforeEach 取决于我的外部 beforeEach 运行ning 之前,这被认为是不好的做法吗?

我正在使用
节点 14.11.0
摩卡 8.1.3

输出与预期不符的原因是内部描述使用的是 before 而不是 beforeEach

before 在 describe 块中的所有测试之前仅 运行s 一次,在 describe 块中的每个测试之前 beforeEach 运行s 。这意味着外部描述的 beforeEach 需要在内部 before

之后 运行