承诺拒绝失败与柴承诺

时间:2017-03-16 10:25:36

标签: promise q chai-as-promised

我使用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;
});

1 个答案:

答案 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);
});