mocha-sinon

mocha integration for sinon

Usage no npm install needed!

<script type="module">
  import mochaSinon from 'https://cdn.skypack.dev/mocha-sinon';
</script>

README

mocha-sinon

Build Status

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

What you should do instead of using this module

This module is stupidly simple. You can do it yourself and have one fewer dependency with:

// require sinon somehow and in your test helper, do:

beforeEach(function() {
  if (null == this.sinon) {
    this.sinon = sinon.sandbox.create();
  } else {
    this.sinon.restore();
  }
});

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');

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', '/']);
    });
  });
});