【问题标题】:How to run async mocha tests in their order?如何按顺序运行异步摩卡测试?
【发布时间】:2021-09-17 20:17:49
【问题描述】:

获取以下代码:

describe('foobar', function () {
   it('foo', async () => {
      // ############ API Call ############
      let foo = await chaiHttpUtil.postRequest(yadda, yadda yadda);
      // ############ Verify results ############
      expect(foo).to.have.status(200);
   ));
   it('bar', async () => {
      // ############ API Call ############
      let bar = await chaiHttpUtil.postRequest(yadda, yadda yadda);
      // ############ Verify results ############
      expect(bar).to.have.status(200);
   ));
));

当上面运行时,我看到第一个“it”(即 foo)被启动,而不是等待它完成,然后它启动第二个“it”(即 bar)。

如何让 bar 等到 foo 完成?我可以吗?我了解async 的本质是它只是在等待完成,但我可以在栏中放一些东西让它等待第一个完成吗?


更新:

我使每个测试都独立于状态和彼此。现在效果很好。谢谢指导!

【问题讨论】:

  • 您对it 一个接一个运行的期望是不正确的。 (您只等待发布请求,而不是 it 本身。)此外,每个它应该彼此独立。您要么应该将代码放在一个 it 语句中,要么动态创建它们。

标签: node.js async-await mocha.js


【解决方案1】:

正如@k0pernikus 所说,“每个都应该相互独立”。

一些可能的解决方案:

  1. 您可以将这些测试组合成一个 it 函数,因为它们相互依赖。

  2. 不应将状态更改传播到其他测试,并且应为每个测试恢复状态。使用 beforeEach/afterEach 钩子可以帮助您实现这一点。见:https://mochajs.org/#using-async-await

  3. 您可以利用这种延迟的根设置 (https://mochajs.org/#delayed-root-suite),但我不怀疑这一点 就是你要找的。​​p>

还有一点需要注意的是:

不鼓励将箭头函数(又称“lambdas”)传递给 Mocha。

你应该使用

it('bar', async function () { //... });

而不是

it('bar', async () => { //... });

见:https://mochajs.org/#arrow-functions

【讨论】:

    猜你喜欢
    • 2018-05-24
    • 2023-03-08
    • 2012-04-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多