我已经在单元测试中看到了一些地方,其中函数从函数调用中返回q.allSettled()
promise ,并且在 promise 中附加了.fail
。但是,即使某些/所有promise被拒绝,.allSettled
也会调用.then
。
这是一个例子:
function someFunctionToTest(){
var aRejectedDeferred = Q.defer();
var anotherRejectedDeferred = Q.defer();
var aResolvedDeferred = Q.defer();
aRejectedDeferred.reject(new Error("I'm aRejectedPromise"));
anotherRejectedDeferred.reject(new Error("I'm anotherRejectedPromise"));
aResolvedDeferred.resolve({awesome:"I'm aResolvedPromise"});
return Q.allSettled([aRejectedDeferred.promise,anotherRejectedDeferred.promise, aResolvedDeferred.promise])
}
it('should never fail', function(done) {
someFunctionToTest()
.then(function (data) {
should.equal(data[0].state,'rejected');
should.equal(data[1].state,'rejected');
should.equal(data[2].state,'fulfilled');
// throw(new Error('I will trigger fail!!!'));
done();
})
.fail(function (err) {
done(err);
});
});
您能否提供一些触发
.fail
的示例? 最佳答案
Q.allSettled
不能失败。看到Q API其中说
很明显,无论allSettled
中的 promise 如何,您仍然会获得已解决的 promise 。
在您的特定情况下,.then
语句可能会由于以下原因而失败:下一行
should.equal(data[0].state,'rejected');
这可能会引发一个断言异常,这将导致失败,您可以捕获它并运行
done();
,这是对测试工具说异步请求已完成的一种方式。但这只是一个猜测。 Q.allSettled
本身不会失败。