0.0.3 • Published 12 years ago

sinon-mocha v0.0.3

Weekly downloads
25
License
-
Repository
github
Last release
12 years ago

Sinon Mocha

Sinon Mocha is an extension library for mocha/sinon that will automatically clean up "wrapped" methods.

Tested with:

SinonMocha
1.30.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)

0.0.3

12 years ago

0.0.2

12 years ago

0.0.1

12 years ago