0

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

此测试失败并出现错误:测试(我使用实习生作为单元测试库)虽然以下测试通过:

bdd.it("Test rejection", function () {
    var promise = q.promise(function (resolve, reject, notify) {
        reject(new Error("test"));
    }).should.be.rejectedWith(Error);
    return promise;
});
4

1 回答 1

1

该库需要您返回的返回值.rejectedWith()才能测试断言。你只是.should.be.rejectedWith()在你的测试中间打电话,它对此无能为力。

如果您查看chai-as-promised 的文档,您会发现这正是他们在示例中所做的:

return promise.should.be.rejectedWith(Error); 

对于其他基于 Promise 的断言也是如此,例如.should.become().

你的第二个测试是正确的。您也可以只使用return而不是先将结果分配给变量:

bdd.it("Test rejection", function () {
    return q.promise(function (resolve, reject, notify) {
        reject(new Error("test"));
    }).should.be.rejectedWith(Error);
});
于 2017-03-16T11:36:26.477 回答