Skip to content

Latest commit

 

History

History
97 lines (66 loc) · 2.28 KB

README.md

File metadata and controls

97 lines (66 loc) · 2.28 KB

mocha-sinon

Build Status

Integration between mocha and sinon, allowing for automatic cleanup of spies

Installation

via npm:

$ npm install --save-dev mocha-sinon

Usage

Server-side

Require it somewhere in your spec helper file (easier, better)

require('mocha-sinon');

or, on your command line calling mocha:

$ mocha -R mocha-sinon test.js

Using mocha's flakey --watch flag

For background, please see issue #1 on this project.

If you use mocha's flakey watch flag, there is experimental support for it. Note that the first method of requiring the mocha-sinon is the best way to do it.

You can put the following block in your spec helper and it might work:

require('mocha-sinon')();

Note that the difference between this method and the first method is that this is calling mocha-sinon's exported function.

Browser-side

Source the mocha-sinon file after you have sourced mocha and sinon, and it will "do the right thing"

Unfortunately, I'm not familiar with requirejs, so mocha-sinon does not yet support requirejs. Pull requests are welcome, though.

Example

var child_process = require('child_process')
  , events        = require('events')
  , chai          = require('chai')
  , expect        = chai.expect
;

chai.use(require('sinon-chai'));
require('mocha-sinon');

describe('a shell command', function(){
  beforeEach(function(){
    var fakeChild = this.fakeChild = {
      stdout: new events.EventEmitter()
    };

    this.sinon.stub(child_process, 'spawn', function(){
      return fakeChild;
    });
  });

  it('gets called', function(done){
    someFunction(function(err){
      expect(child_process.spawn).to.have.been.calledWith('/usr/bin/env', ['rm', '-rf', '/']);
    });
  });
});

If you don't like this module

This module is stupidly simple. You can do it yourself with:

var sinon = require('sinon');

beforeEach(function() {
  this.sinon = sinon.sandbox.create();
});

afterEach(function(){
  this.sinon.restore();
});