Skip to content

Instantly share code, notes, and snippets.

@alicial
Last active June 10, 2019 14:26
Show Gist options
  • Save alicial/7681791 to your computer and use it in GitHub Desktop.
Save alicial/7681791 to your computer and use it in GitHub Desktop.
AngularJS: Setting up a mocked service to use in controller unit tests.
// Mocked Service
angular.module('mock.users', []).
factory('UserService', function($q) {
var userService = {};
userService.get = function() {
return {
id: 8888,
name: "test user"
}
};
// example stub method that returns a promise, e.g. if original method returned $http.get(...)
userService.fetch = function() {
var mockUser = {
id: 8888,
name: "test user"
};
return $q.when(mockUser);
};
// other stubbed methods
return userService;
});
// Controller Unit Tests
describe('My Controller', function() {
var ctrl, scope;
beforeEach(module('module.containing.controller'));
// include previous module containing mocked service which will override actual service, because it's declared later
beforeEach(module('mock.users'));
beforeEach(inject(function($controller, $rootScope, _UserService_) { // inject mocked service
scope = $rootScope.$new();
ctrl = $controller('MyController', {
$scope: scope,
UserService: _UserService_
});
}));
// unit tests go here
});
@leshow
Copy link

leshow commented Dec 11, 2014

great gist, thanks.

@seanislegend
Copy link

Thanks from me too!

@lcustodio
Copy link

Great gist @alicial! I've question related to this. How would I mock the service in a directive instead? Is the same approach reusable?

@cyrilchaponeverysens
Copy link

Hey =)

Greaat gist. Thanks. I've been looking for this for long.

I experienced weird issues when mocking like

  var getListDeferred;
  beforeEach(module(function($provide) {
    $provide.service('thingApi', function($q) {
      this.getList = jasmine.createSpy('getList').and.callFake(function() {
        var deferred = $q.defer();
        getListDeferred = deferred;
        return deferred.promise;
      });
    });
  }));

So I'm gonna try your solution.

@Ankitg44
Copy link

Ankitg44 commented Feb 6, 2016

Hey Alicial, thanks for the solution.

@RicardoAlmeida25
Copy link

Thanks for this ;)

@ultr7A
Copy link

ultr7A commented Mar 1, 2018

More helpful than SO. Cheers

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment