J'essaie de tester mon contrôleur à l'aide de jasmin. Fondamentalement, lorsque le contrôleur est créé, il appelle un service pour effectuer une requête http. J'utilise httpBackend pour obtenir les fausses données. Lorsque j'essaie d'exécuter le test, je reçois toujours l'erreur "Aucune demande en attente de vidage". Si je supprime le httpBackend.flush(), le test échoue car controller.data.name n'est pas défini. Quelqu'un peut-il savoir pourquoi cela arrive comme ça? Merci.Impossible d'utiliser le vidage httpBackend pour ngMockE2E
Le code du module est ici:
var myModule = angular.module('myModule', ['ngMockE2E']);
myModule.run(function($httpBackend){
$httpBackend.whenGET('/Person?content=Manager').respond(function(){
var response = {'name':'Bob','age':'43'}
return [200,response];
})
});
Le code pour le service:
myModule.factory('myService',function($http){
return {
getData: function(position){
return $http.get('/Person?content='+position);
}
}
});
Le code pour le contrôleur est:
myModule.controller('myController',function(xrefService){
var _this = this;
_this.data ={};
_this.getData = function(position){
myService.getData(position).then(function(response){
_this.data = response.data
});
}
_this.getData("Manager");
})
Le code pour tester la le contrôleur est:
describe("Test Controller",function(){
var controller,httpBackend,createController;
beforeEach(module('myModule'));
beforeEach(inject(function($controller,$httpBackend){
createController = function(){
return $controller('myController');
}
httpBackend = $httpBackend;
}));
it("should return data",function(){
controller = createController();
httpBackend.flush();
expect(controller.data.name).toEqual("Bob");
});
})
Merci danday74, ça marche maintenant. Cependant, je me demande si nous pouvons éviter d'utiliser expectGET(). Respond() dans la méthode de test. Puisque cela signifie que j'ai besoin de lire le code de service pour tester le contrôleur. Par exemple peut-être que je veux juste tester si controller.data n'est pas vide (ce qui signifie qu'il reçoit des données du backend). – Steven
maintenant vous pensez :) ouais vous voulez utiliser un espion Jasmine. http://ng-learn.org/2014/08/Testing_Promises_with_Jasmine_Provide_Spy. – danday74
spyOn (myService, 'getData'). Et.callFake (function() { var def = $ q.defer(); def.resolve (VOS_MOCK_HTTP_RESPONSE); return def.promise; }); \t attend (myService.getData) .toHaveBeenCalled(); – danday74