我开始使用Jasmine对依赖承诺的JavaScript库进行单元测试。我需要异步地使测试用例失败,并希望编写如下内容:
describe("An async test suite", function () {
it("should fail asynchronously", function (done, fail) {
var promise = myLibraryCall();
promise.then(done, function(reason) { fail(reason); });
});
});
然而,从我能看到的内容中,没有任何类似fail
调用的内容。并且我不能在异步错误情况下抛出异常,因为它没有被Jasmine捕获 - 所有我得到的是最终的通用超时。解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
除了修改Jasmine本身之外,简单的解决方案是围绕expect
和custom matcher的组合创建一个包装器,使其失败并显示给定的消息。
function endTestAfter(promise, done) {
var customMatchers = {
toFailWith: function () {
return {
compare: function (actual, expected) {
return {
pass: false,
message: "Asynchronous test failure: " + JSON.stringify(expected)
};
}
}
}
};
jasmine.addMatchers(customMatchers);
promise.done(done, function (reason) {
expect(null).toFailWith(reason);
done();
});
}
这会产生以下测试套件代码:
describe("An async test suite", function () {
it("should fail asynchronously", function (done, fail) {
var promise = myLibraryCall();
endTestAfter(promise, done);
});
});