AngularJS& Karma-Jasmine - $ httpbackend仅在有一个或多个待处理请求时刷新

时间:2015-06-25 05:19:42

标签: javascript angularjs unit-testing karma-jasmine httpbackend

只有在有待处理的请求时才可以调用$httpbackend.flush();吗? 所以我永远不会得到

  

错误:未刷新的请求:1,2,3,...,n

或者

  

错误:没有待处理的待处理请求!

3 个答案:

答案 0 :(得分:2)

根据documentation,您可以使用$http.pendingRequests属性。像这样的东西会起作用:

if($http.pendingRequests.length > 0) {
    $httpBackend.flush();
}

我不确定这是一个非常好的主意,但应该这样做。

答案 1 :(得分:1)

我认为你应该组织你的测试,不要使用任何“if”内部测试。 为什么? 为了简单易懂地理解实际测试的内容,“if”提供了一种在失败时通过测试的方法。

当没有向API发出请求时,将单独的测试函数写入测试用例。

在测试中阅读AAA(Arrange Act Assert)模式,它会对你有帮助。

答案 2 :(得分:1)

如果你没有"期待"您可以在try-catch块中调用http.flush(n)来忽略异常的任何请求。

http.whenGet(/* .. */).respond(/*..*/);  // maybe implementation needs some data

service.doSomething();

try { http.flush(99); }  // resolve all the possible requests my service might have to do
catch(e) {}

expect(service.isAwesome).toBe(true);