Ich versuche, einen Controller in meinem Angular Rahmen zu testen:Verwendung während eines Winkel Controller testen
.controller('UserCtrl', ['$scope', '$location', 'User', 'Config',
function ($scope, $location, User, Config) {
...
}])
Dieser Controller auf ein paar Dienstleistungen abhängt, die die $ HTTP-Objekt benötigen zu machen Server ruft:
.factory('User', ['$http', function ($http) {
var data = {};
return {
query: function(oper, putdata, callback){
if(oper == 'get'){
$http.get(getUrl("user",null)).success(function(data2) {
console.log(data2);
callback(data2);
data.userinfo = data2;
});
},
userinfo: data
};
}])
Aber wenn ich versuche, den Controller Bootstrapping kann ich nicht httpBackend an die Arbeit:
describe('UserCtrl', function(){
var ctrlScope, ctrl, $httpBackend, controllerService;
beforeEach(
inject(function($httpBackend, $http, $rootScope, $controller, User, Config) {
_User = User;
_Config = Config;
spyOn(User, 'getUserInfo').andCallThrough();
//spyOn(User, 'query').andCallThrough();
ctrlScope = $rootScope.$new();
controllerService = $controller;
httpMock = $httpBackend;
})
);
it('should create setup userinfo object ', function() {
httpMock.expectGET("/user/default/details").
respond({somejson});
ctrl = controllerService('UserCtrl', {$scope: ctrlScope, $location: location, User: _User, Config: _Config});
expect(_User.getUserInfo).toHaveBeenCalled();
httpMock.flush();
expect(ctrlScope.userinfo.length).toBe(1);
});
});
Alles, was ich jemals bekommen ist:
Error: No pending request to flush !
so ist es möglich, mit einem Service zu nutzen httpBackend, die Sie von einem Controller aufgerufen haben Sie testen?
Wo ist getUserInfo definiert? Es scheint, als ob deine Methode immer noch 'Query' genannt wird? – Rafi