我有麻烦试图在我的摩卡单元测试使用assert.throws,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()
,但仍然通过在我的回调中调用它,但没有成功。我错过了什么?
assert.throws不适用于异步引发的异常。 –