Jasmine 2.0 async done() and angular-mocks inject() in same test it() Jasmine 2.0 async done() and angular-mocks inject() in same test it() javascript javascript

Jasmine 2.0 async done() and angular-mocks inject() in same test it()


This should work; I ran into the same problem when I updated to Jasmine 2.0

it("should send get request", function(done) {    inject(function(someServices) {        //some async test        done();    })(); // function returned by 'inject' has to be invoked});


An IMPORTANT note is the brackets after the inject call. Eg.

inject(function(someServices) {   //some async test   done();})();  <-- these brackets here important.

If you look at the type of inject:

export declare function inject(tokens: any[], fn: Function): () => any;

You can see it returns a function, so you were getting no output because you forgot to call the function!!

If you think about it, it makes sense that it returns a function, because it takes a function!

So the extra parentheses should solve all problem!

Working Example:

  it('should allow you to observe for changes', function(done) {    inject([GlobalStateService], (globalStateService: GlobalStateService) => {      globalStateService.observe("user", storageType.InMemoryStorage, (user: string) => {        expect(user).toBe("bla");        done();      });      globalStateService.write({ user: "bla"}, storageType.InMemoryStorage);    })();  });


To add to the answer of @Scott Boring and to the comment of @WhiteAngel who mentionned that the code inside inject was never called.

This worked for me:

it("should send get request", function(done) {    inject(function(someServices) {       //some async test       done();    })();});