1

如何$http在单元测试中使 AngularJS 调用超时,以便在网络超时的情况下测试我的代码行为?我在$httpBackend对象中没有发现任何东西,也尝试$timeout自己没有产生结果。我测试过的代码用于$http发出请求和$timeout安排重试,尽管我认为这无关紧要,因为我不能强制单个调用超时。

演示该问题的代码:http: //jsfiddle.net/5xE8d/5/

4

1 回答 1

0

我知道这个答案并没有真正直接回答所问的问题,但可能会解决问题。

“让$http时间结束”测试错误的事情。您的 jsFiddle 直接测试超时是否在您配置的 time 之后发生。那不是单元测试。

您正在测试的功能可以$http正常工作,因为它会在配置的时间后触发错误回调。$http然而不是被测系统

根据经验,对于单元测试,您应该假设依赖项按规定工作。您应该假设 $http 服务在您配置的时间之后触发错误回调。

这将问题减少到这两个测试:

  • 确保为呼叫正确配置超时,并且
  • 确保您的回调执行正确的操作。

如果您坚持确保$http依赖项和代码的集成正常工作,那将属于集成测试,或者在角度世界中属于E2E 测试

否则,您可以模拟 $http 并检查您收到的参数是否已timeout: 5000设置在它们上面。对于另一种情况,您可以再次模拟 $http 并捕获您提供给的回调error(),直接在您的测试中调用它。

于 2014-02-28T16:07:20.357 回答