如何在单元测试中使AngularJS $http
调用超时,以便在网络超时情况下测试我的代码行为?我在$httpBackend
对象中找不到任何东西,也试用$timeout
本身没有产生结果。我的测试代码使用$http
来请求和$timeout
安排重试,但我认为它不相关,因为我不能强制一个呼叫超时。
演示问题的代码:http://jsfiddle.net/5xE8d/5/
如何在单元测试中使AngularJS $http
调用超时,以便在网络超时情况下测试我的代码行为?我在$httpBackend
对象中找不到任何东西,也试用$timeout
本身没有产生结果。我的测试代码使用$http
来请求和$timeout
安排重试,但我认为它不相关,因为我不能强制一个呼叫超时。
演示问题的代码:http://jsfiddle.net/5xE8d/5/
我知道这个答案并没有真正直接回答这一问题问过,但可能会解决这个问题。
“让$http
超时”测试错误的东西。您的jsFiddle直接测试即发生超时经过您配置的时间。这不是一个单元测试。
您正在测试的功能是$http
正常工作,因为它会在配置的时间后触发错误回调。 $http
但是不是系统在测试。作为一个经验法则,对于单元测试,您应该假定依赖性按照指定的方式工作。您应该假设$ http服务会在配置后触发错误回调。
这降低了问题这两项测试:
如果你坚持在确认$http
依赖的整合,你的代码工作正常,那些只属于成一个集成测试,或在角世界的E2E test。
否则,你可以模拟出$ http并检查你收到的参数是否设置了timeout: 5000
。对于其他情况,您可以再次模拟$ http并捕获您给error()
的回调,并直接在您的测试中调用该回调。
'这不相关,因为我不能强制一个电话超时。“为什么? –
看起来像角度mocks.js的拉请求是在你的未来。 –
@MaximShoustin:因为我不知道该怎么做。 '$ timeout(function({// continue test here}),time_to_wait);'不起作用,例如。 – Tamas