根据我的理解,如果before
方法出现错误,mocha测试框架将抛出此错误:
> $(npm bin)/mocha test/*.js
1) "before all" hook
我尝试了许多不同的东西来捕捉这个错误,但似乎没有任何工作:
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)
}
})
从注释掉的代码中,您可以看到服务器在服务器实际开始侦听之前需要完成异步操作。似乎唯一有效的方法是在before
块之外初始化服务器,并在done()
函数中立即调用before
,或者传递一个不需要的函数参数。但是,这仍然是一个问题,因为在测试开始时服务器没有初始化。
疯狂地说,当我连接到调试器时,这段代码可以工作,所以我甚至无法检查是否有错误。
答案 0 :(得分:5)
当我发布这个问题时,我偶然发现了this bug,这让我发现我需要在this.enableTimeouts(false)
函数的开头调用before
,就像这样:
let server
before(function(done) {
this.enableTimeouts(false) <----
server = require('../app')
server.initialize()
.then(() => {
console.info('listening on', process.env.PORT)
server.listen(process.env.PORT, done)
})
.catch(err => {
console.log(err)
done(err)
})
})
希望这有助于其他人进行几个小时的调试。
答案 1 :(得分:0)
问到已经有一段时间了,但是对于将来的读者,我们去:
您可以使用mocha test/*.js --timeout 5000
命令运行测试。就是这样。
但是,如果您使用npm test
命令运行测试,只需编辑package.json
文件
像这样:
"scripts": {
"start": "nodemon ./bin/www",
"test": "mocha --exit --recursive --timeout 5000" // add this line
}