【问题标题】:Sinonjs test method that consumes a promise使用 Promise 的 Sinonjs 测试方法
【发布时间】:2018-01-26 04:51:15
【问题描述】:

我有一个类似这样的 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 以返回一个承诺,但这对我来说很可疑。欢迎任何意见,谢谢!

【问题讨论】:

    标签: javascript node.js unit-testing sinon


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 2014-06-27
      • 1970-01-01
      相关资源
      最近更新 更多