我有一个看起来像这样的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以返回一个承诺,但这对我来说有点腥味。欢迎任何意见,谢谢!
答案 0 :(得分:1)
您创建了一个异步方法,该方法既不返回promise,也不包含回调作为参数。这不是一个好习惯,因为您无法知道异步功能何时完成。一个简单的解决方法是从函数返回promise并将assert作为promise链的一部分执行。