[英]Mocha/Chai async tests 'done()' fn not working
我正在测试我的银行模型如下:
describe('Bank Model - Ajax', function () {
it('loads bank', function (done) {
var bank = new Bank();
bank.OnLoaded = _(function () {
expect(this.id).to.eql(1171);
expect(true).to.eql(false);
done();
}).bind(bank);
bank.load(1171);
});
});
加载调用向我的服务器发出ajax请求。 我的问题是expect(true).to.eql(false);
抛出一个Uncaught Assertion Error
,我不知道为什么。 我正在使用推荐的Mocha策略来结束我的测试用例。 我做错了吗?
谢谢。
你没有做错任何事。 Mocha不容易捕获回调中抛出的异常,因为它们在测试函数完成后执行,因此任何失败的断言都是未捕获的致命错误,而不是通常用同步代码获得的好差异。
人们正在研究解决方法,例如提供断言库可以调用而不是抛出的自定义方法 ,或者在Node中运行时使用节点域 。 但就目前看来,它仍然没有理想的表现。
由于done
方法接受包含错误的单个参数,因此您可以向测试添加代码以捕获回调中的异常并将它们传递给catch块内的done(err)
。 但它快速变得非常混乱。
可以通过以下某种辅助函数减少重复:
function catching(done, fn) {
try {
fn();
done();
} catch(err) {
done(err);
}
}
然后:
bank.OnLoaded = catching(done, _(function () {
expect(this.id).to.eql(1171);
expect(true).to.eql(false);
}).bind(bank));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.