Jasmine 2 Spy Cheat Sheet

Dave Ceddia bio photo By Dave Ceddia Comment

If you’re tired of Googling for the Jasmine docs every time you need to use a spy, look no further!

Jasmine is my testing framework of choice when I’m writing Angular. And I was just getting used to all those spy methods with the help of Toby Ho’s cheat sheet, and then Jasmine 2 came along and changed all the method names.

So here’s an updated cheat sheet for spying with Jasmine 2.

Create a spy

Spy on an existing method
spyOn(obj, 'method');   // same as Jasmine 1
Create a new function to use as a spy
jasmine.createSpy('optional name');    // same as Jasmine 1
Create a new object with spy functions as properties
jasmine.createSpyObj('name', ['fn1', 'fn2', ...]);    // same as Jasmine 1

Modify behavior when the spy is called

Default spy behavior is to record the call with its context/arguments and stop there. Spies will not call through to the spied function by default. These calls all modify that behavior.

Call through to the original
Return the specified value
Call the given function instead of the real one
obj.method.and.callFake(function() {...});
Throw an error
Reset to default stubbing behavior (resets the operations above)

Verifying and counting calls on a spy

Every call to a spy is exposed on the calls property

Returns true if any calls have been made
Returns the number of times the spy got called
Reset the call tracker

After calling reset(), any() will be false, count() will be 0, etc.

Returns the first call’s context and arguments

It will return an object like this:

  object: {...},  // 'this' object
  args: []        // array of arguments
Returns the most recent call’s context and arguments

It will return an object like this:

  object: {...},  // 'this' object
  args: []        // array of arguments
Returns array of context and arguments passed to each call

The returned array looks like this:

    object: {...},  // 'this' object
    args: [...]     // array of arguments
  ...               // one object for each call

That’s it! Go test some stuff.

comments powered by Disqus