Я уже целый день пытаюсь понять, как проверить результат запроса $http.GET, который возвращает данные из файла .json. Я надеюсь, что кто-то из вас сможет здесь чем-то помочь. Практически приложение работает отлично и возвращает правильный JSON, который я ожидал.
У меня есть контроллер с именем «ProgramController» и служба; «ДатаСервис».
Контроллер:
function ProgramController(DataService) {
var vm = this;
vm.timeline = {};
activate();
////////////////
function activate() {
DataService.getTimelineData().then(function (data) {
console.log(data);
});
}
}
Сервис:
function DataService($http) {
var service = {
getTimelineData: getTimelineData
};
return service;
///////////////
function getTimelineData() {
return $http.get('data/program.json').then(function (httpResult) {
return httpResult.data;
});
}
}
Тесты для проверки ответа контроллера и службы;
describe('Program', function () {
var controller, scope, dataserviceMock, httpBackend;
beforeEach(module('mymodule'));
beforeEach(inject(function ($rootScope, $controller, $injector, $q, $httpBackend, $http) {
scope = $rootScope.$new();
httpBackend = $httpBackend;
dataserviceMock = {
getTimelineData: function () {
return $http.get('data/program.json').then(function (httpResult) {
return httpResult.data;
});
}
};
controller = $controller('ProgramController', { 'DataService': dataserviceMock });
}));
describe('when initializing the controller', function () {
it('object timeline should be something', function () {
httpBackend.whenGET('data/program.json').respond(mockedTimelineData);
httpBackend.flush();
expect(controller.timeline).toEqual(mockedTimelineData);
});
});
});
Тест терпит неудачу, когда я пробую это. Хотя свойство «controller.timeline» определено как «{}» в контроллере. Спецификация даже не доходит до этого момента. Она не работает на .flush() httpBackend.
Результат в браузере показывает следующую ошибку:
Ошибка: Неожиданный запрос: GET js/app/program/program.template.html
Больше запросов не ожидается
Который ссылается на шаблон, который принадлежит ProgramController, определенному в определении $stateProvider.
У кого-нибудь из вас есть идея, что я делаю неправильно здесь? Я действительно понятия не имею. Я уже сделал кое-что с $q.defer и обещаю решить в тестах, но я действительно не могу понять это...