我尝试使用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
循环时似乎无法执行。
我想知道是否有任何解决方案可以解决这类问题。谢谢。
答案 0 :(得分:0)
将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');
});