消费promise的Sinonjs测试方法

Sinonjs test method that consumes a promise

我有一个看起来像这样的 javascript 方法:

someMethod=function(){
  somePromise.run().then(()=>{
    //do success stuff
  }).catch((err)=>{
    //do fail stuff
    registerError(err);
  });
}

我想确保错误被​​记录下来,所以我设置了以下测试。

it('should register error', ()=>{
  somePromise = {
    run: sinon.stub
  };
  registerError = sinon.stub;
  somePromise.returns(Promise.reject({err: 'foo'}));
  someMethod();
  assert(registerError.calledWith({err: 'foo'}));
});

此测试失败,因为断言在 someMethod 中的承诺完成之前触发。我可以将 someMethod 更新为 return 一个 promise,但这对我来说有点可疑。欢迎任何意见,谢谢!

您创建了一个不 return 承诺或包含回调作为参数的异步方法。这不是一个好的做法,因为您不知道异步函数何时完成。一个简单的解决方法是 return 函数中的承诺,并将断言作为承诺链的一部分执行。