Ich versuche, meinen Controller mit Jasmin zu testen. Wenn der Controller erstellt wird, ruft er im Grunde einen Dienst auf, um eine http-Anfrage zu stellen. Ich verwende httpBackend, um die gefälschten Daten zu erhalten. Wenn ich versuche, den Test auszuführen, erhalte ich immer den Fehler "Keine ausstehende Anfrage zum Löschen". Wenn ich die httpBackend.flush() entfernen, schlägt der Test fehl, da controller.data.name nicht definiert ist. Kann jemand wissen, warum es so passiert? Vielen Dank.Kann httpBackend nicht für ngMockE2E flush
Der Code für das Modul ist hier:
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];
})
});
Der Code für den Service:
myModule.factory('myService',function($http){
return {
getData: function(position){
return $http.get('/Person?content='+position);
}
}
});
Der Code für Controller:
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");
})
Der Code der testen Controller ist:
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");
});
})
Dank danday74, es funktioniert jetzt. Allerdings frage ich mich, ob es überhaupt möglich ist, expectGET(). Respond() in der Testmethode zu verwenden. Da muss ich den Dienstcode lesen, um den Controller zu testen. Zum Beispiel möchte ich nur testen, ob controller.data nicht leer ist (was bedeutet, dass es einige Daten vom Backend empfängt). – Steven
jetzt deine Gedanken :) ja du willst einen Jasmine Spion benutzen. http://ng-learn.org/2014/08/Testing_Promises_with_Jasmine_Provide_Spy. – danday74
spyOn (myService, 'getData').callFake (function() { var def = $ q.defer(); def.resolve (YOUR_MOCK_HTTP_RESPONSE); Rückgabe def.Promise; }); \t expect (myService.getData) .toHaveBeenCalled(); – danday74