【问题标题】:Running async code before 'describe' in Mocha [duplicate]在 Mocha 中“描述”之前运行异步代码 [重复]
【发布时间】:2016-11-30 18:02:32
【问题描述】:

我正在尝试使用 for 循环动态生成测试,但要生成的测试数量是从异步任务中获得的。这是我的代码:

var noOfTestsToRun;

before(function() {
    return someAsyncTask().then(function(result) {
        noOfTestsToRun = result;
    })
});

describe('My Test Suite', function() {
    for (var i = 0; i < noOfTestsToRun; i++) {
        it('Test ' + i, function() {
            //...
        });
    }
});

但是,noOfTestsToRun = result 在到达for 循环时似乎没有被执行。

我想知道是否有解决此类问题的方法。谢谢。

【问题讨论】:

  • Mehdi,上面的链接是关于在所有 'it' 之前运行异步任务,我的是关于在 'describe' 之前运行异步任务
  • 路易斯,它有效,非常感谢。但是还有一个问题,如果我想在另一个describe 之前在另一个describe 中执行一些异步任务怎么办?
  • 先执行异步代码,然后定义所有mocha 的东西,比如beforedescribe 等等。

标签: node.js mocha.js


【解决方案1】:

done 回调传递给您的before 函数。

var noOfTestsToRun;

before(function(done) {
    return someAsyncTask().then(function(result) {
        noOfTestsToRun = result;

        // Complete the async stuff
        done();
    })
});

describe('My Test Suite', function() {
    for (var i = 0; i < noOfTestsToRun; i++) {
        it('Test ' + i, function() {
            //...
        });
    }
});

当您的异步任务完成并调用 done() 时,我们告诉 Mocha 异步内容已完成,它可以继续执行预期。

更新

因此,您的目标是让 mocha 运行您的动态测试。

您可以通过一些技巧来实现这一点。您将需要一个 it 块来强制执行 before。在此之前,您可以根据您的异步结果动态生成it 测试。

before(function() {
    return someAsyncTask().then(function(result) {
        describe('My Test Suite (dynamic)', function() {
            for (var i = 0; i < result; i++) {
                it('Test ' + i, function() {
                    // ...
                });
            }
        });
    });
});

it('should force before to execute', function() {
    console.log('Hack to force before to execute');
});

Working pen

【讨论】:

  • 感谢您的快速回复。但它不起作用。我已将 someAsyncTask() 替换为 Promise.resolve(1) 并尝试了您的解决方案。 noOfTestsToRun 在到达for 循环时仍然未定义
  • 上面的解决方案有一个常数值['nl', 'fr', 'de'] 用于forEach 生成测试。我的需要来自异步任务的值。它不能解决我的问题。
  • 实际上,批准答案下方的答案是适合您的答案。我已经在这里为你更新了答案。
  • 这个答案中的两个代码 sn-ps 都是错误的。第一个使用done 回调返回一个promise。返回 Promise 时无需使用 done 回调。第二个代码 sn-p 从内部 before 调用 describeit。这是 Mocha 不支持的。一个小演示似乎可以工作,但一个尝试使用相同技术的成熟套件会以意想不到的方式执行测试。
猜你喜欢
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 2020-09-05
相关资源
最近更新 更多