我想写一个摩卡测试,它传递流错误,但如果流结束时没有错误失败。测试应通过流错误,成功失败
检测错误不成问题,但始终调用完成处理程序,即使强制错误输出流。在此代码中,error
处理程序的should.exist(err)
声明可正常工作,但之后finish
处理程序仍会引发错误。
describe('catch stream errors', function() {
it('should throw an error', function(done) {
var stream = failStream();
stream.on('error', function(err) {
should.exist(err);
done();
})
stream.on('finish', function() {
done(new Error('Why does this still run?'));
});
stream.write();
stream.end();
})
})
一个解决方法,这似乎是一个黑客位的,是一个范围可变errored
处理程序上面,然后翻转它在error
处理程序,并检查在finish
处理程序中的值。似乎应该有更好的方式来处理这个问题。
var errored = false;
stream.on('error', function(err) {
should.exist(err);
errored = true;
done();
})
stream.on('finish', function() {
if (!errored) {
done(new Error('Error suppressed'));
}
});
充分的要点here。
你看看https://github.com/mochajs/mocha/wiki/Spies? – Sonata
感谢您的指针。这应该工作,除了我的实际用例是公共包,所以我宁愿避免添加任何新的依赖关系。 – joemaller
也许这个特定流的实现有错误吗?流从哪里来? – Ben