2016-03-03 40 views
0

我有一個Jasmine單元測試,測試一個角控制器,從而函數返回一個承諾,並用承諾的結果填充控制器字段。我正在測試這個檢查字段是否填充並調用$ rootScope。$ apply來解析promise並設置值。

當$ rootScope。$ apply被調用時,我得到一個錯誤,因爲一個模塊嘗試在其配置設置中獲取json文件。

噶顯示錯誤T爲關係到$ hhtpBackend和來自角mocks.js

Error: Unexpected request: GET /languages/en.json 
No more request expected 
     at $httpBackend (c:\dev\myapp\scrips\angular-mocks.js:1244:17) 
     at sendReq (c:\dev\myapp\scripts\angular.js) 
     at serverRequest (c:\dev\myapp\scripts\angular.js) 
     at Scope.$eval 
     at Scope.$digest 
     at Scope.$apply 

回答

2

你需要告訴噶期望的呼叫。像下面這樣的東西應該工作:

 // Note this is just for a typical test 
     it('should make an http get request',function() { 
     httpBackend.expectGET(fullUrlToGoTo).respond({data: 'Success'}); 
     // function that triggers the call 
     httpBackend.flush(); 
     }); 

但在你的情況,因爲它在設置部分發生的事情你需要將其移動到beforeEach功能,我相信,確保它被稱爲加載您的應用程序模塊之前。

+0

真棒,停止了我所看到的錯誤,謝謝你。我的承諾沒有解決,但我現在看看那個部分,並將其取出 –

+0

@AnthonyJoanes沒問題。承諾可能很煩人。正確的方法是注入$ q並調用$ q.defer()。然後,您將能夠控制承諾的部分內容,即解決或拒絕 – Katana24

+0

謝謝@ Katana24。我現在正在使用$ q服務並嘲弄我的服務依賴關係來完成所有工作。感謝$ httpBackend提示,我在最後一個項目中使用了chutzpah,並且不需要這樣設置。 –