Sinon.JS integration for the Mocha test harness
Do you get annoyed when writing your Mocha tests with Sinon stubs - that you have to ceremoniously stub and restore methods in each test, like so:
beforeEach(function () {
sinon.stub(my, 'method');
});
afterEach(function () {
my.method.restore();
});
Maybe you've discovered sinon sandboxes, but you still have the same rigmorale:
beforeEach(function () {
this.sandbox = sinon.sandbox.create();
sinon.stub(my, 'method');
});
afterEach(function () {
this.sandbox.restore();
});
Well then look no further! This convinient wrapper will add stub
, spy
,
mock
, useFakeTimers
, useFakeServer
and useFakeXMLHttpRequest
to the
Mocha context, and automatically restores them in the right way. It seemlessly
works with before()
, beforeEach()
and it()
s so that it just works:
before()
spies/timers/requests will survive for the wholedescribe()
beforeEach()
spies/timers/requests will be reset for eachit()
it()
spies/timers/requests will live for the duration of that singleit()
Simply add sinomocha
to your npm dependencies:
npm install --save sinomocha
Then require the method and run it (it require's sinon, so don't sweat it):
require('sinomocha')();
require('sinomocha')();
describe('all together now', function () {
var object = {
methodOne: function () {},
methodTwo: function () {},
methodThree: function () {},
};
before(function () {
this.stub(object, 'methodOne');
});
beforeEach(function () {
this.stub(object, 'methodTwo');
});
it('stubs in before work', function () {
assert(object.methodOne.restore.sinon);
object.methodOne();
assert(object.methodOne.called);
});
it('stubs in before survive through the description', function () {
assert(object.methodOne.called);
});
it('stubs in beforeEach work', function () {
assert(object.methodTwo.restore.sinon);
object.methodTwo();
assert(object.methodTwo.called);
});
it('stub in beforeEach will be reset for each test', function () {
assert(object.methodTwo.called === false);
});
it('stubs in an test work', function () {
this.stub(object, 'methodThree');
object.methodThree();
assert(object.methodThree.called);
});
it('stub in an test exist only for that test', function () {
assert(object.methodThree.restore === undefined);
});
});
Thanks goes to Domenic Denicola's mocha as promised. This is based off of his original work.