消耗承诺的Sinonjs测试方法

时间:2018-01-25 20:45:11

标签: 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', ()=>{
  somePromise = {
    run: sinon.stub
  };
  registerError = sinon.stub;
  somePromise.returns(Promise.reject({err: 'foo'}));
  someMethod();
  assert(registerError.calledWith({err: 'foo'}));
});

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

1 个答案:

答案 0 :(得分:1)

您创建了一个异步方法,该方法既不返回promise,也不包含回调作为参数。这不是一个好习惯,因为您无法知道异步功能何时完成。一个简单的解决方法是从函数返回promise并将assert作为promise链的一部分执行。