sinon-mocha
v0.0.1Sinon Mocha
Sinon Mocha is an extension library for mocha/sinon that will automatically clean up "wrapped" methods.
Tested with:
Sinon | Mocha |
---|---|
1.3 | 0.12 |
As of version 0.0.1 browser support is not tested but is planned in a future version.
Example Usage
var sinon = require('sinon'),
//You don't need to use expect for this to work
//This is just to provide a working example
expect = require('expect.js');
//Enhance sinon
//You can also pass a mocha as the second argument.
require('sinon-mocha').enhance(sinon);
describe("MyClass", function(){
var MyClass = require('my-class'),
subject;
//before (all) hooks are *NOT* automatically cleaned up for you.
before(function(){
sinon.stub(MyClass.prototype, 'ajax', function(){
//...
});
});
//You must `.restore` the method yourself.
after(function(){
MyClass.prototype.ajax.restore();
});
beforeEach(function(){
subject = new MyClass();
sinon.spy(subject, 'spiedMethod');
//Stubs also work
sinon.stub(subject, 'stubbedMethod');
//And stubs with functionality
sinon.stub(subject, 'stubbedMethodWFunc', function(){
console.log(' I get called ! ' );
});
});
describe(".spiedMethod", function(){
it("will call spy", function(){
subject.spiedMethod();
expect(subject.spiedMethod.called).to.be(true);
});
});
// Etc...
});
How it works
In short sinon's wrapMethod function is overwritten to capture its results in the beforeEach
of every test.
Then in the afterEach
those methods are .restore()
[d].
To gain access to mocha there is a hack that will search through require.cache
and pick out its mocha/index.js
and require it to ensure we modify the actual mocha being used. I ran into some issue that lead me down this path.
When running require('mocha')
I would end up with a different instance then was being used inside the test context.
Mocha.Runner.runSuite
is patched to add a beforeEach and afterEach that invokes the sinon magic.
See lib/mocha-hooks.js
.
WHY?
Jasmine spoiled me.
License
MIT (see LICENSE)
Source Code
github.com/lightsofapollo/si...Metadata
- MIT
- *
- James Lal
- released 2/5/2012