我正在尝试使用 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() {
//...
});
}
});
Run Code Online (Sandbox Code Playgroud)
但是,noOfTestsToRun = result当它到达for循环时似乎没有被执行。
我想知道是否有解决此类问题的方法。谢谢你。
根据我的理解,如果before方法中出现一些错误,mocha测试框架将抛出此错误:
> $(npm bin)/mocha test/*.js
1) "before all" hook
Run Code Online (Sandbox Code Playgroud)
我尝试了许多不同的东西来捕捉这个错误,但似乎没有任何工作:
before(function(done) {
server = require('../app')
try {
server.listen(process.env.PORT)
done()
// server.initialize()
// .then(() => {
// console.info('listening on', process.env.PORT)
// server.listen(process.env.PORT, done)
// })
// .catch(err => {
// console.log(err)
// done(err)
// })
} catch (err) {
console.log('outer error', err)
done(err)
}
})
Run Code Online (Sandbox Code Playgroud)
从注释掉的代码中,您可以看到服务器具有我需要在服务器实际开始侦听之前完成的异步操作.似乎唯一有效的方法是在before块外部初始化服务器,并done()在before函数中立即调用,或者传递不带参数的函数.但是,这仍然是一个问题,因为在测试开始时服务器未初始化.
疯狂地,当我连接到调试器时,此代码可以工作,因此我甚至无法检查是否有错误.