如何$http
在单元测试中使 AngularJS 调用超时,以便在网络超时的情况下测试我的代码行为?我在$httpBackend
对象中没有发现任何东西,也尝试$timeout
自己没有产生结果。我测试过的代码用于$http
发出请求和$timeout
安排重试,尽管我认为这无关紧要,因为我不能强制单个调用超时。
演示该问题的代码:http: //jsfiddle.net/5xE8d/5/
如何$http
在单元测试中使 AngularJS 调用超时,以便在网络超时的情况下测试我的代码行为?我在$httpBackend
对象中没有发现任何东西,也尝试$timeout
自己没有产生结果。我测试过的代码用于$http
发出请求和$timeout
安排重试,尽管我认为这无关紧要,因为我不能强制单个调用超时。
演示该问题的代码:http: //jsfiddle.net/5xE8d/5/
我知道这个答案并没有真正直接回答所问的问题,但可能会解决问题。
“让$http
时间结束”测试错误的事情。您的 jsFiddle 直接测试超时是否在您配置的 time 之后发生。那不是单元测试。
您正在测试的功能可以$http
正常工作,因为它会在配置的时间后触发错误回调。$http
然而不是被测系统。
根据经验,对于单元测试,您应该假设依赖项按规定工作。您应该假设 $http 服务在您配置的时间之后触发错误回调。
这将问题减少到这两个测试:
如果您坚持确保$http
依赖项和代码的集成正常工作,那将属于集成测试,或者在角度世界中属于E2E 测试。
否则,您可以模拟 $http 并检查您收到的参数是否已timeout: 5000
设置在它们上面。对于另一种情况,您可以再次模拟 $http 并捕获您提供给的回调error()
,直接在您的测试中调用它。