消费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 函数中的承诺,并将断言作为承诺链的一部分执行。
我有一个看起来像这样的 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 函数中的承诺,并将断言作为承诺链的一部分执行。