Javascript Sinonjs使用承诺的测试方法

Javascript Sinonjs使用承诺的测试方法,javascript,node.js,unit-testing,sinon,Javascript,Node.js,Unit Testing,Sinon,我有一个javascript方法,看起来像这样: someMethod=function(){ somePromise.run().then(()=>{ //do success stuff }).catch((err)=>{ //do fail stuff registerError(err); }); } 我想确保错误被注册,所以我设置了以下测试 it('should register error', ()=>{ somePromi

我有一个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中的承诺完成之前激发。我可以更新一些方法来回报一个承诺,但我觉得这有点可疑。欢迎任何意见,谢谢

您创建了一个异步方法,该方法既不返回承诺,也不包含回调作为参数。这不是一个好的实践,因为您无法知道异步函数何时完成。一个简单的修复方法是从函数返回承诺,并作为承诺链的一部分执行断言