我遇到一个奇怪的问题,我为我的模块编写了多个测试,但最后一个没有用。我测试了一个异步函数,一切都很好,除非测试失败。我不知道为什么但是assert.equal之后的代码没有被执行。如果测试成功,则正确调用done。
describe('download', function(){
it('should download pictures from given URLs', function(done){
Download.download(list, function(){
var pictures = fs.readdirSync("exports/merge/");
console.log('before assert - '+pictures.length);
assert.equal(pictures.length, 3);
console.log('before done - '+pictures.length);
done();
});
});
});
打印“断言前”的日志,然后什么也没发生。 如果I pictures.length等于3,则正确调用done()。
答案 0 :(得分:1)
承诺吞下错误。为了抛出它们,最简单的解决方案是使用.done()
结束承诺链。
var p = Download.download(list, function(){
var pictures = fs.readdirSync("exports/merge/");
console.log('before assert - '+pictures.length);
assert.equal(pictures.length, 3);
console.log('before done - '+pictures.length);
done();
});
p.done();
有关主题的详情,请参阅bluebird's documentation或Q's documentation:
当你到达承诺链的末尾时,你应该返回最后的承诺或结束链。由于处理程序捕获错误,因此异常可能未被观察到的是一种令人遗憾的模式。 因此,要么将其返回,要么将其结束。