2016-07-27 184 views
0

當遇到下面的行,當使用具有Restangular茉莉花和角(1.4.7)(1.4.0),httpBackend和角度嘲笑(1.4.7),鉻和PhantomJS兩者碰撞:角httpBackend崩潰瀏覽器

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

  • 呼叫/東西。 說出乎意料的GET //東西 (雙斜線)
  • 使用/ something/another而不是單個根級別 目錄。 沒有區別。
  • 使用$ http而不是Restangular。 沒有區別。
+1

我的猜測是你的代碼有一個無限循環。你能隔離代碼,以便我們重新創建問題嗎? – andale

回答

0

前一段時間解決了這個問題。發生了什麼事是$ httpBackend測試導致了路由更改。路線變化導致事件發生並使我們陷入循環。

但是,這隻發生在使用$ httpBackend進行測試時。在現實世界中,這個無限循環沒有發生。

有兩種解決方法:在你的beforeEach

  1. 重新定義$ location.go(),使您的測試不會 實際上導致重定向 - 或 -
  2. 捕獲的事件在某種程度上和壓扁了,或者只是改變你的代碼到 不會觸發它