我在 Mocha 单元测试中尝试使用 assert.throws 时遇到了麻烦,
我有这个方法:
var getMetadatas = function (file, callback) {
fs.readFile(file, {encoding: 'utf-8'}, function(err, data){
// stuff
if (somethingWentWrong)
throw new Error('Something went wrong')
// callback call
})
}
在我的单元测试中,我有:
it('should throw an error when passing a bad formatted file', function(){
assert.throws(
getMetadatas('someBadFormattedFile', function(metadatas){})
)
})
我得到的结果是随机的,有时会抛出错误(我得到了Uncaught Error: something went wrong
)并且测试失败,有时它会通过。
我尝试了其他一些事情,例如通过回调传递错误并执行以下操作:
var fn = function(){
parse.getMetadatas('test/test_incorrect.md', function (err, metas) {
if (err) throw err
})
}
assert.throws( function() { fn() }, Error )
我得到了输出:AssertionError: Missing expected exception (Error)..
所以我猜他什么也没看到......
我可以assert.throws
按预期工作的唯一方法是使用同步函数:
assert.throws(
function () {throw new Error('error')}
)
我想知道它是否必须与 做某事done()
,但即使在我的回调中调用它,也没有成功。我错过了什么?