我有一个非常简单的承诺,我想根据承诺的输入来测试它是否已被解决或拒绝。
var isPair = function(number) {
var deferred = Q.defer();
if (number % 2 == 0) {
deferred.resolve(number + " is pair.");
} else {
deferred.reject(number + " is not pair.");
}
}
it("rejects the promise when number is not pair", function() {
return expect(isPair(1)).to.be.rejected;
}
即使我将param设置为2,我的测试也会返回true。
您能举例说明我如何测试承诺是否已解决或被拒绝?如果可能,请使用期望语法。
谢谢。
答案 0 :(得分:3)
如果您正在使用chai,则可以安装chai-as-promised以获取所需的语法:
it("rejects the promise when number is not pair", function() {
return expect(isPair(1)).to.eventually.be.rejected();
});
否则,您可以使用mocha提供的done()
回调来指示成功/失败:
it("rejects the promise when number is not pair", function(done) {
isPair(1).then(function() {
done(new Error('Should have rejected'));
},
function() {
done();
});
});
答案 1 :(得分:2)
其他答案是可靠的,或者你可以这样做:
it("rejects the promise when number is not pair", function() {
return isPair(1).then(Promise.reject, Promise.resolve);
});
这基本上是#34;倒置"承诺并期望拒绝承诺(如果承诺拒绝它,如果没有则拒绝)。
由于您使用的是Q而非本机承诺或新库:
it("rejects the promise when number is not pair", function() {
return isPair(1).then(Q.reject, Q);
});
你真的不需要这里的期望语法:)