【发布时间】:2016-08-20 17:21:39
【问题描述】:
我在单元测试中看到了一些地方,其中函数从函数调用返回q.allSettled() 承诺,并且承诺附加了.fail。但是.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 的示例?
【问题讨论】:
-
我没有查看源代码,但可以想象如果你不传入数组/可迭代或类似的东西它会失败。
-
@Bergi,不,它只是用一个空数组调用
.then