我使用chai-as-promised库和q库生成的promise。 这个简单的测试用例应该有效(承诺必须被拒绝)或者我误解了承诺功能吗?
bdd.it("Test rejection", function () {
var promise = q.promise(function (resolve, reject, notify) {
reject(new Error("test"));
}).then(function () {
// Nothing to do
});
promise.should.be.rejectedWith(Error);
return promise;
});
此测试失败,错误:测试(我使用Intern作为单元测试库),但是下面的测试通过:
bdd.it("Test rejection", function () {
var promise = q.promise(function (resolve, reject, notify) {
reject(new Error("test"));
}).should.be.rejectedWith(Error);
return promise;
});
答案 0 :(得分:1)
库需要您返回.rejectedWith()
的返回值,以便测试断言。你只是在测试过程中调用.should.be.rejectedWith()
,它无法做任何事情。
如果你看一下documentation for chai-as-promised,你可以看到这正是他们在他们的例子中所做的:
return promise.should.be.rejectedWith(Error);
其他基于声明的断言(例如.should.become()
。
你的第二次测试是正确的。您也可以使用return
而不是先将结果分配给变量:
bdd.it("Test rejection", function () {
return q.promise(function (resolve, reject, notify) {
reject(new Error("test"));
}).should.be.rejectedWith(Error);
});