我已经在单元测试中看到了一些地方,其中函数从函数调用中返回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本身不会失败。

10-06 11:39