Skip to content
Integration between sinon and mocha, allowing for automatic cleanup of spies
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
test Modernize and simplify. Mar 19, 2017
.gitignore Functional, if not stupidly simple module Feb 8, 2013
.travis.yml Test different versions of dependencies May 8, 2018
Makefile Modernize and simplify. Mar 19, 2017 Use correct mocha flag May 11, 2017
mocha-sinon.js Clean the sandbox after the last test May 8, 2018
package.json Version bump for new release May 8, 2018


Build Status

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


via npm:

$ npm install --save-dev mocha-sinon



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


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:


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


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.


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


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

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

  it('gets called', function(done){
      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:

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

beforeEach(function() {
  if (null == this.sinon) {
    this.sinon = sinon.sandbox.create();
  } else {
You can’t perform that action at this time.