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

Unit testing 如何让$http调用在单元测试中超时?,unit-testing,angularjs,Unit Testing,Angularjs,如何在单元测试中使AngularJS$http调用超时,以便在网络超时的情况下测试代码行为?我在$httpBackend对象中找不到任何东西,同时尝试$timeout本身也没有产生结果。我的测试代码使用$http发出请求,使用$timeout安排重试,尽管我认为这与此无关,因为我无法强制一个调用超时 演示此问题的代码:我知道此答案实际上并没有直接回答问题,但可能会解决问题 让$http超时测试错误的东西。JSFIDLE直接测试超时是否发生在配置的时间之后。这不是单元测试 您正在测试的功能是,$h

如何在单元测试中使AngularJS$http调用超时,以便在网络超时的情况下测试代码行为?我在$httpBackend对象中找不到任何东西,同时尝试$timeout本身也没有产生结果。我的测试代码使用$http发出请求,使用$timeout安排重试,尽管我认为这与此无关,因为我无法强制一个调用超时


演示此问题的代码:

我知道此答案实际上并没有直接回答问题,但可能会解决问题

让$http超时测试错误的东西。JSFIDLE直接测试超时是否发生在配置的时间之后。这不是单元测试

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

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

这将问题归结为以下两个测试:

确保为呼叫正确配置超时,以及 确保回调执行正确的操作。 如果您坚持要确保$http依赖项和代码的集成工作正常,那么这将属于集成测试,或者在角度世界中属于角度测试


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

这与此无关,因为我无法强制一个调用超时。为什么?看起来angular-mocks.js上的pull请求在你的未来会出现。@Maxishoutin:因为我不知道怎么做$timeoutfunction{//continue test here},等待的时间;例如,不工作。请看这个:那个不使用$http。我更新了我的问题以链接一个JSFIDLE。