为什么这个异步茉莉花测试失败
Why is this async Jasmine test failing?
为什么这个测试失败了,说onSuccess
间谍从未被召唤过?
it('should correctly call the success callback',function(done)
{
const callbacks={
onSuccess:function()
{
console.log('OK');
done();
},
onError:function()
{
console.log('ERR');
done();
}
};
spyOn(callbacks,'onSuccess').and.callThrough();
spyOn(callbacks,'onError').and.callThrough();
doSomethingAsync(callbacks.onSuccess,callbacks.onError);
expect(callbacks.onSuccess).toHaveBeenCalled();
expect(callbacks.onError).not.toHaveBeenCalled();
});
运行测试时,我收到一条错误消息,说Expected spy onSuccess to have been called.
.
在其上方,有一个控制台日志显示"OK",这意味着间谍被调用并且它通过。
很难断言一个回调被调用,而另一个回调不是没有存根doSomethingAsync
或其内部。
这是一个人为的边缘情况:
function doSomethingAsync(onSuccess, onError) {
setTimeout(function() {
onSuccess('hello');
}, 500);
setTimeout(function() {
onError(new Error('foo'));
}, 1000);
}
(所以它在半秒后调用onSuccess
,一秒后调用onError
(
如果在 onSuccess
处理程序中断言尚未调用onError
,则测试将通过,即使调用onError
(尽管半秒后(。
这是您无法轻松解决的问题,除非(如前所述(您将存根(内部(doSomethingAsync
。
如果您只想测试doSomethingAsync
是否调用正确的处理程序,则可以将测试用例缩短为以下内容(前提是在callbacks
对象中调用处理程序并非绝对必要(:
it('should correctly call the success callback',function(done) {
doSomethingAsync(done, done.fail);
});
(不过,这不会捕获doSomethingAsync
调用两个处理程序;如果它在onError
之前调用onSuccess
,则测试将通过(。
相关文章:
- ChaiJS:无法导致测试失败
- 当我的单元测试失败时,回调被调用了两次
- 预期[false]为false量角器e2e测试失败
- 为什么在我的单元测试中instanceOf的测试失败
- yeoman generator聚合物的web组件测试失败
- 当Firefox尝试登录时,Selenium测试失败
- 量角器中的AngularJS E2E测试失败
- 用摩卡测试失败的承诺'内置的promise支持
- 这个单元测试失败的原因是什么
- 当分离到不同的文件中时,测试失败
- travis测试失败,通过本地测试
- 字符串测试失败
- Javascript单元测试依赖关系-当依赖对象发生变化时,如何使测试失败
- 如何在捕获Promise时使Node单元测试失败
- AngularJs的单元测试失败是因为Karma没有'无法识别$scope$控制器中的侦听器
- 有没有办法在node.js中的异常或测试失败时启动调试器
- Capybara JS 测试失败了 page.all
- 现代化测试失败后仍应用函数
- 角度咆哮 V2 - 单元测试失败
- 为什么这个 QUnit 测试失败