i-spy
A super simple spying library that mimics the jasmine spy API for use with
other frameworks. Doesn't force you into the stub / mock / fake choice like
sinon.js.
Installation (nodejs)
npm install i-spy
Api
createSpy()
Returns a function spy, optionally takes a function that will be executed when the spy is called.
var iSpy = require('i-spy');
var spy = iSpy.createSpy();
var spyWithAction(function () {
console.log('hi');
});
spy();
spyWithAction(); //-> hi
spy.calls
A 2 dimentional array of all the recorded calls to the spy.
var spy = iSpy.createSpy();
spy('hello', 'world');
spy({foo: 'bar'});
spy.calls[0][0]
spy.calls[0][1]
spy.calls[1][0]
spy.wasCalled()
Returns a boolean that determines whether a spy has been called
var spy = iSpy.createSpy();
spy.wasCalled();
spy('anything');
spy.wasCalled();
spy.reset()
Clears any recorded calls on the spy
var spy = iSpy.createSpy();
spy(1);
spy.calls.length;
spy.reset();
spy.calls.length;
Usage
Simple usage:
var iSpy = require('i-spy');
var spy = iSpy.createSpy(function fake() {
return 'foo';
});
describe('frobnicator', function () {
it('frobnicates', function () {
frob.fronicate(spy);
assert(spy.wasCalled());
assert(spy.calls.length === 1);
assert(spy.calls[0].length, 2);
});
});
Asynchronous tests:
var iSpy = require('i-spy');
describe('frobnicator', function () {
it('frobnicates', function (done) {
var spy = iSpy.createSpy(function fake(err, frobs) {
done(err);
});
frob.fronicate(spy);
assert(spy.wasCalled());
assert(spy.calls.length === 1);
assert(spy.calls[0].length, 2);
});
});
Spy behaviour can also be controlled via a fluent interface:
var iSpy = require('i-spy');
var erroringSpy = iSpy.createSpy().thatThrows(new Error('Oops'));
var returningSpy = iSpy.createSpy().thatReturns('Woohoo');
var callThroughSpy = iSpy.createSpy().thatCalls(function () {
});