Angular httpBackend崩溃的浏览器

时间:2016-07-27 16:42:22

标签: angularjs unit-testing jasmine restangular

当使用带有Restangular(1.4.0),httpBackend和angular-mocks(1.4.7)的Jasmine和Angular(1.4.7)时,Chrome和PhantomJS在遇到以下行时都会崩溃:

httpBackend.whenGET('/something').respond(200);

如果我完全摆脱它,如下所示,我收到以下错误:

//httpBackend.whenGET('/something').respond(200);
scope.doSomething();  // will invoke a GET to /keepAlive
httpBackend.expectGET("/something").respond(200);
httpBackend.flush();

错误:意外请求:GET /某事 不再需要预期

它正在测试的代码是:

$scope.doSomething = function () {
    Restangular.one('something').get();
};

我已经尝试了我能想到的一切。我认为这只是Karma / Jasmine / Restangular中的一个错误,但我不知道如何解决它。

值得注意的一点是,httpBackend和Restangular对URL不一致。 Restangular将/添加到/something。 httpBackend没有。这就是他们不匹配的原因。

我尝试过但没有成功的事情:

  • 从Restangular调用/ something。 表示意想不到的GET //某事 (两个斜线)
  • 使用/ something / other而不是单个根级别 目录。 没有区别。
  • 使用$ http而不是Restangular。 没有区别。

1 个答案:

答案 0 :(得分:0)

前一段时间解决了这个问题。发生的事情是$ httpBackend测试导致路由更改。那次路线变化导致事件发生,导致我们陷入困境。

但是,这只发生在使用$ httpBackend进行测试时。在现实世界中,这种无限循环没有发生。

有两种解决方案:

  1. 在您的beforeEach()中重新定义$ location.go,以便您的测试不会 实际上导致重定向 - 或 -
  2. 以某种方式捕获事件并压缩它,或者只是将代码更改为 不要触发它