如何在单元测试中让$ http调用超时?

时间:2013-10-18 09:37:52

标签: unit-testing angularjs

如何在单元测试中使AngularJS $http调用超时,以便在网络超时的情况下测试我的代码行为?我在$httpBackend对象中找不到任何内容,同时试验$timeout本身并没有产生结果。我测试过的代码使用$http来发出请求,$timeout用来安排重试,但我认为它不相关,因为我无法强制执行单次调用超时。

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

1 个答案:

答案 0 :(得分:0)

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

"让$http超时"测试错误的东西。您的jsFiddle直接测试 那不是单元测试。

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

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

这减少了这两个测试的问题:

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

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

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