如何在单元测试中使AngularJS $http
调用超时,以便在网络超时的情况下测试我的代码行为?我在$httpBackend
对象中找不到任何内容,同时试验$timeout
本身并没有产生结果。我测试过的代码使用$http
来发出请求,$timeout
用来安排重试,但我认为它不相关,因为我无法强制执行单次调用超时。
演示此问题的代码:http://jsfiddle.net/5xE8d/5/
答案 0 :(得分:0)
我知道这个答案并没有真正直接回答问题,但可能会解决问题。
"让$http
超时"测试错误的东西。您的jsFiddle直接测试 那不是单元测试。
您正在测试的功能是$http
正常工作,因为它在配置的时间后触发错误回调。 $http
但不是正在测试的系统。
根据经验,对于单元测试,您应该假设依赖项按指定的方式工作。您应该假设$ http服务在您配置之后触发错误回调。
这减少了这两个测试的问题:
如果您坚持确保$http
依赖项和代码的集成正常工作,那将属于集成测试,或者在角度世界中E2E test。
否则你可以模拟$ http并检查你收到的参数是否设置了timeout: 5000
。对于另一种情况,你可以再次模拟$ http并捕获你给error()
的回调,直接在你的测试中调用它。