我正在测试我的银行模型如下:
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策略来结束我的测试用例。我做错了吗?
感谢。
答案 0 :(得分:9)
你没有做错任何事。 Mocha不能轻易捕获回调中抛出的异常,因为它们在测试函数完成后执行,因此任何失败的断言都是未捕获的致命错误,而不是通常用同步代码获得的差异。
人们正在研究providing a custom method that assertion libraries can call instead of throwing或using Node Domains when running in 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));