2017-09-04 61 views
0

我需要測試在Angular 1.5.9下使用jasmine/karma實現的內部角度服務。

我需要編寫一個測試來檢查特定服務函數的響應是否如預期的那樣。爲此,我正在構建一個模擬對象,實例化該服務,調用要測試的函數並使用expect().toBe()來檢查返回的值。

不幸的是,該服務打了很多電話給自己的功能,其中許多電話使用角度服務進一步撥打電話。它這樣做是爲了填充用戶數據,區域設置和其他定製產品信息等對象。我只想說我不能將服務重構爲更好的架構;我必須簡單地構建這個測試。

因爲有這麼多的電話$http我打算嘲笑所有會要求使用一系列的線像這樣的數據:

var mockGetCartData = { "d": null, "message": null }; // at the top of the describe 
$httpBackend.when('GET', /(.*)\/order\/api\/v1\/GetCart/).respond(200, mockGetCartData); // in the beforeEach 

當我打電話的功能進行測試,我馬上打電話$httpBackend.flush()但是,由於測試失敗,我擔心我需要做的是在下一個進行之前導致每個(僞造的)$http調用刷新。

是否需要執行此操作或設置所有$httpBackend.when().respond()條目,然後根據測試功能進行操作,然後調用單個的flush()就足夠了?如果這還不夠,我該怎麼辦?

回答

1

您不需要爲每個請求調用flush(),因爲它會刷新所有掛起的請求。

參見文檔https://docs.angularjs.org/api/ngMock/service/$httpBackend

https://github.com/angular/angular.js/blob/master/src/ngMock/angular-mocks.js#L1830

然而,如果在該方法中被測$http請求被鏈接在一起(因此後續請求僅先前的請求之後進行已解決),那麼您需要爲鏈中的每個請求提供flush()。沒有看到所測試的代碼是我能夠提供的所有幫助。

0

你必須模擬It塊中唯一需要的http調用,並在函數調用後刷新它。否則,它會嘗試刷新意外的http調用,這將導致錯誤。