Update: If you are using Jasmine 2.0 or above, the information here is out of date! Please go to http://jasmine.github.io/2.0/introduction.html#section-Spies instead.

Wanna be a spy fast? Well you are in luck!

Just kidding! This is actually a cheatsheet for Jasmine Spies.

See, while Jasmine itself is very intuitive to use, every time use spies I have to look up the docs. I would blame it on the poorly chosen method/property names, but I won't. Instead I finally wrote myself a cheatsheet. I hope it helps other folks too.

How to spy on a method?

spyOn ( obj , 'method' ) // assumes obj.method is a function

How to verify it was called?

expect ( obj . method ). toHaveBeenCalled ()

How to verify it was called with specific arguments?

expect ( obj . method ). toHaveBeenCalledWith ( 'foo' , 'bar' )

How many times was it called?

obj . method . callCount

What were the arguments to the last call?

obj . method . mostRecentCall . args

How to reset all the calls made to the spy so far?

obj . method . reset ()

How to make a standalone spy function?

var dummy = jasmine . createSpy ( 'dummy' ) $ ( 'button#mybutton' ). click ( dummy )

How to have spied method also calls through to the real function?

spyOn ( obj , 'method' ). andCallThrough ()

Update: if you are using Jasmine 2, andCallThrough() has been changed to and.callThrough() .

How to get all arguments for all calls that have been made to the spy?

obj . method . argsForCall // this is an array

How do I fix the return value of a spy?

spyOn ( obj , 'method' ). andReturn ( 'Pow!' )