Запрос на удержание AngularJS Jasmine get-request
У меня есть factory, чтобы выполнить запрос get, я бы хотел протестировать. К сожалению, тест кармы говорит мне, что в $httpBackend нет ответа.
AngularJs 1.2.14,
Жасмин 2.0,
Карма 0.12.0
Здесь мой модуль, который я бы хотел проверить:
var appFactory = angular.module('appFactory', []);
appFactory.factory('boxListService', function($http){
return{
getList: function(){
return $http.get('/boxlist').then(function(result){
return result.data;
});
}
};
});
Мой тест таков:
describe('Module-Test', function() {
beforeEach(module('appFactory'));
it('should call $http.get in getList', inject(function (boxListService, $httpBackend){
$httpBackend.expectGET('/boxlist');
boxListService.getList();
$httpBackend.flush();
}));
});
Сообщение:
Error: No response defined !
at $httpBackend (D:/nodeJS/host/test_app/src/public/js/libs/angular/angular-mock.js:1206:13)
Ответы
Ответ 1
Вы должны определить ожидаемый ответ, а также ожидаемый запрос. Он будет иметь форму:
$httpBackend.expectGET('/boxlist').respond(HTTP_STATUS_CODE, EXPECTED_RESPONSE);
HTTP_STATUS_CODE - целое число.
EXPECTED_RESPONSE - это возвращаемое значение (часто это Object Literal).
Вы можете определить только один из них.
Дополнительную информацию смотрите в документации ngMock httpBackend.
Ответ 2
На всякий случай это помогает и потому, что это случилось со мной, хотя это не точный случай вопроса. У меня были две строки:
$httpBackend.whenGET(myService.serviceURL).respond(myMock);
$httpBackend.expectGET(myService.serviceURL);
С when
я хотел определить, что ответить при вызове службы, а с помощью expect
я хотел проверить, вызван ли этот метод.
Это не работает (хотя иногда это происходит, я не знаю почему). Я думаю, что как-то expect
переопределяет when
, и поэтому я получил
Ошибка: ответа не найдено!
Решение заключалось в том, чтобы удалить предложение when
и добавить respond()
в expect
$httpBackend.expectGET(myService.serviceURL).respond(myMock);
Я не знаю, почему структура ведет себя именно так. Если кто-то знает, было бы хорошо, что вы объясните это здесь, чтобы улучшить ответ.