2013-10-18 54 views
1

如何在单元测试中使AngularJS $http调用超时,以便在网络超时情况下测试我的代码行为?我在$httpBackend对象中找不到任何东西,也试用$timeout本身没有产生结果。我的测试代码使用$http来请求和$timeout安排重试,但我认为它不相关,因为我不能强制一个呼叫超时。

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

+0

'这不相关,因为我不能强制一个电话超时。“为什么? –

+0

看起来像角度mocks.js的拉请求是在你的未来。 –

+0

@MaximShoustin:因为我不知道该怎么做。 '$ timeout(function({// continue test here}),time_to_wait);'不起作用,例如。 – Tamas

回答

0

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

“让$http超时”测试错误的东西。您的jsFiddle直接测试发生超时经过您配置的时间。这不是一个单元测试。

您正在测试的功能是$http正常工作,因为它会在配置的时间后触发错误回调。 $http但是不是系统在测试。作为一个经验法则,对于单元测试,您应该假定依赖性按照指定的方式工作。您应该假设$ http服务会在配置后触发错误回调。

这降低了问题这两项测试:

  • 确保你正确配置timout呼叫,并
  • 确保您的回调执行正确的操作。

如果你坚持在确认$http依赖的整合,你的代码工作正常,那些只属于成一个集成测试,或在角世界的E2E test

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