J'ai du mal à trouver comment tester le résultat d'une requête $ http.GET renvoyant des données d'un fichier .json. J'espère que l'un d'entre vous peut être d'une quelconque aide ici. Pratique, l'application fonctionne parfaitement et renvoie le bon JSON que je m'attendais.
J'ai un contrôleur nommé 'ProgramController' et un service; 'DataService'.
Controller:
function ProgramController(DataService) {
var vm = this;
vm.timeline = {};
activate();
////////////////
function activate() {
DataService.getTimelineData().then(function (data) {
console.log(data);
});
}
}
service:
function DataService($http) {
var service = {
getTimelineData: getTimelineData
};
return service;
///////////////
function getTimelineData() {
return $http.get('data/program.json').then(function (httpResult) {
return httpResult.data;
});
}
}
Tests pour tester le contrôleur et la réponse de service;
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);
});
});
});
Le test échoue lorsque je l'essaie. Bien que la propriété 'controller.timeline' soit définie comme '{}' dans le contrôleur. La spécification ne parvient même pas à ce point. Elle échoue sur le .flush() du httpBackend.
Le résultat dans le navigateur affiche l'erreur suivante;
Error: Unexpected request: GET js/app/program/program.template.html
No more request expected
Quelles références au modèle qui appartient au ProgramController défini dans la définition $ stateProvider.
Est-ce que l'un d'entre vous a une idée de ce que je fais de mal ici? Je n'ai vraiment aucune idée. J'ai déjà fait quelques trucs avec $ q.defer et promis de résoudre des tests, mais je ne peux vraiment pas comprendre ce que je fais ...
D'accord, merci! va essayer ça! Le mockedTimelineData est quelque chose de similaire à ce que vous avez décrit dans 'return' {'id': '1'}, {'id': '2'}]; '... juste quelques données json simples. –
hmm .. encore quand je fais httpBackend.flush() il demande le 'js/app/programme/programme.template.html' :(mais un autre ajout .. ne devrait pas 'httpBackend.whenGET (' données/programme. json '). respond (mockedTimelineData);' est-ce suffisant pour se moquer du résultat dans la requête http? –
en quittant le .flush out .. le 'alors' dans le Controller> Dataservice.getTimelineData() ne se déclenche pas du tout .. l'attente échoue aussi parce qu'elle vérifie {} toBe {data: "data"} –