angular service unit test

Ok. Let’s talk about javascript real unit-testing…

Say you have a Service:

function MyService() {
   this.greet = function(name) {
       return 'hello ' + name;
   }
};

so, in order to test it you can access it from global scope:

it("test greet()", function() {
    var myService = new MyService();
    expect(myService.greet('bob')).toBe('hello bob');
});

OK, now let’s take this service, and register it to angular. Now we’d like to test it, using angular’s DI mechanism:

var MyService;

beforeEach(module('MyModule'));

beforeEach(inject(function(_MyService_) {
    MyService = _MyService_;
}));

it("test greet()", function() {
    expect(MyService.greet('bob')).toBe('hello bob');
});

So what do we have here?

we are using 2 method from ngMock

  • we tell angular what is the “namespace” that we will use with module()
  • we inject service to our local var with inject()

Note that we don’t need to instansiate it since angular does it for us (services are singletons in angular).