我有麻煩試圖在我的摩卡單元測試使用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不適用於異步引發的異常。 –