I am testing a controller that uses a service that returns a promise. I have mocked out a service in my tests and created a spy
so that I can test if the service was actually called.
However I keep getting this error
TypeError: 'undefined' is not a function
(evaluating 'spyOn(mockService, 'one').andReturn(deferred.promise)')
My Test
beforeEach(inject(function($rootScope, $controller, $q) {
scope = $rootScope.$new();
mockService = {
one: function(){
// mock promise
var deferred = $q.defer();
deferred.resolve([
//my array
]);
return deferred.promise;
},
two: function(){
// mock promise
var deferred = $q.defer();
deferred.resolve([
//my data
]);
return deferred.promise;
}
}
var deferred = $q.defer();
spyOn(mockService, 'one').andReturn(deferred.promise);
controller = $controller('MyCtrl', {
$scope: scope,
mockService: mockService
});
}));
it('should call mockService service', function(){
//causes promises to check to see if they are fulfilled
scope.$digest();
expect(mockService.one).toHaveBeenCalled();
});
I am testing a controller that uses a service that returns a promise. I have mocked out a service in my tests and created a spy
so that I can test if the service was actually called.
However I keep getting this error
TypeError: 'undefined' is not a function
(evaluating 'spyOn(mockService, 'one').andReturn(deferred.promise)')
My Test
beforeEach(inject(function($rootScope, $controller, $q) {
scope = $rootScope.$new();
mockService = {
one: function(){
// mock promise
var deferred = $q.defer();
deferred.resolve([
//my array
]);
return deferred.promise;
},
two: function(){
// mock promise
var deferred = $q.defer();
deferred.resolve([
//my data
]);
return deferred.promise;
}
}
var deferred = $q.defer();
spyOn(mockService, 'one').andReturn(deferred.promise);
controller = $controller('MyCtrl', {
$scope: scope,
mockService: mockService
});
}));
it('should call mockService service', function(){
//causes promises to check to see if they are fulfilled
scope.$digest();
expect(mockService.one).toHaveBeenCalled();
});
Share
Improve this question
asked Jan 8, 2016 at 16:04
tester123tester123
1,1232 gold badges12 silver badges18 bronze badges
2
- which version of jasmine are you using? – ericbn Commented Jan 8, 2016 at 16:11
- correction: version 2.4.1 of jasmine – tester123 Commented Jan 8, 2016 at 16:45
1 Answer
Reset to default 1For Jasmine 2 you must use
spyOn(mockService, 'one').and.returnValue(deferred.promise);
instead of andReturn()
.
Read the docs. If you're migrating from Jasmine 1 to Jasmine 2, you also might want to read this.