用 Mocha 测试 Promise [重复]
Posted
技术标签:
【中文标题】用 Mocha 测试 Promise [重复]【英文标题】:Testing promises with Mocha [duplicate] 【发布时间】:2015-07-16 17:26:33 【问题描述】:我有一个非常简单的承诺,我想根据承诺的输入来测试它是否已解决或被拒绝。
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;
例如,即使我将参数设置为 2,我的测试也会返回 true。
你能举个例子说明我如何测试一个承诺是解决还是拒绝?如果可能,请使用 expect 语法。
谢谢。
【问题讨论】:
【参考方案1】:如果你使用 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();
);
);
【讨论】:
【参考方案2】:其他答案是可靠的,或者你可以这样做:
it("rejects the promise when number is not pair", function()
return isPair(1).then(Promise.reject, Promise.resolve);
);
这基本上“反转”了承诺并期望承诺拒绝(如果是则解决它,如果不是则拒绝)。
因为您使用的是 Q 而不是原生 Promise 或新库:
it("rejects the promise when number is not pair", function()
return isPair(1).then(Q.reject, Q);
);
这里你真的不需要expect语法:)
【讨论】:
您好,感谢您的回复。我真的很喜欢你的第二个例子的语法,你能解释一下 Q.reject 和 Q 的实际作用吗?谢谢。 @west Q 将任何内容转换为承诺 - 甚至是被拒绝的错误,以便在出现异常时恢复。 Q.reject 拒绝任何承诺的履行 - 所以它基本上是一个“反转” - 它将履行变成拒绝,反之亦然。以上是关于用 Mocha 测试 Promise [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Mocha 进行测试:基于 Promise 的测试不会自行运行?