3
現象:Karma-Jasmine:如何正確測試http調用?
我需要測試一個http調用,並確保它被正確調用。
在應用程序中一切正常:$ scope.language_list正確地從API
檢索數據,但在測試$ scope.language_list是不確定的。 因此,我可能不會讓測試正確。
的代碼:
功能:
測試:
describe('Http calls test', function() {
beforeEach(module('my_app.controllers'));
beforeEach(inject(function(_$controller_, _$httpBackend_)
{
$scope = {};
var controller = $controller('MainCtrl', { $scope: $scope });
$httpBackend = _$httpBackend_;
$httpBackend.whenGET('http://my_app.org/languageList').respond(200);
}));
it('should load default language list', function()
{
$httpBackend.flush();
console.log($scope.language_list);
expect($scope.valid).toBe(true);
expect($scope.language_list).not.toEqual(undefined);
});
});
其結果是:
$ scope.valid測試正常。如果我故意改變它在函數中的值來看到測試失敗,它確實會失敗,否則會被正確地傳遞爲真。
但是$ scope.language_list工作不正常,並且因未定義傳遞。事實上,該錯誤信息是:Expected undefined not to equal undefined.
問題:
我怎麼能正確測試HTTP調用? 爲什麼$ scope.language_list未定義?我在測試中做錯了什麼?
非常感謝!
謝謝你的回覆。我不明白一件事:以這種方式$ scope.language_list將包含我先前傳遞給mockLanguageList的任何值。如果它是一個空數組將是一個空數組。如果mockLanguageList ='hello',那麼$ scope.language_list將包含'hello'。那麼我怎麼知道http調用已被正確調用?不應該包含來自api的真實數據? – johnnyfittizio
@johnnyfittizio mockLanguageList應該設置爲api應該返回的內容。通過前端單元測試,您不希望實際調用api。這可能會引入主要的複雜性(身份驗證)測試實際的API將從您的服務器端代碼測試套件中完成。我們只想在這裏測試前端代碼。當您指定whenGET('...')時,您正在驗證正確的api。 –