Skip to content
Adds a Given/When/Then DSL to mocha as an alternative style for specs
CoffeeScript JavaScript
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Build Status NPM version

Mocha-given is a mocha interface that helps you write cleaner specs using Given, When, Then and And. It is a shameless port of Justin Searls' jasmine-given which is a tribute to Jim Weirich's terrific rspec-given gem.

Example Specs

describe 'assigning stuff to this', ->
    Given -> @number = 24
    When  -> @number++
    And   -> @number *= 2
    Then  -> @number == 50

describe 'assigning stuff to variables', ->
    subject = null
    Given -> subject = []
    When  -> subject.push('foo')
    Then  -> subject.length == 1

describe 'Testing deferred', ->
    Given -> @t =
    Then.after 1500, 'so much time has passed', -> - @t >= 1500

describe 'Testing async', ->
    Given -> @subject = new User()
    Then 'save user', (done) ->;

Run tests

Global installation of mocha

If you have mocha installed globally you need to install mocha-given globally as well.

$ npm install -g mocha mocha-given

Then you can run your tests by setting the interface of mocha to mocha-given

$ mocha -u mocha-given --compilers coffee:coffee-script -R spec

Local installation of mocha

If you have installed mocha and mocha-given locally

$ npm install mocha-given coffee-script

you have to call the mocha binary directly:

$ ./node_modules/.bin/mocha -u mocha-given --compilers coffee:coffee-script -R spec

Run mocha-given tests & start contributing

To run the mocha-given tests for developing, it has to be symlinked into the node_modules folder to enable mocha to resolve mocha-given.

Therefore run the script:

$ npm run link

Afterwards mocha has to be installed with $ npm install mocha.

Now you can run the tests using $ npm tests and start contributing.

Run tests programmatically

var Mocha = require('mocha');
var fs    = require('fs');
var path  = require('path');

// require mocha-given after Mocha is set

// the directory with your tests/specs
var testDir = 'tests';

// First, you need to instantiate a Mocha instance.
var mocha = new Mocha({
    ui: 'mocha-given',
    reporter: 'spec'

// Get test files
    // allow javascript and coffescript files
    return file.match(/\.(coffee|js)$/);
        path.join(testDir, file)

// Now, you can run the tests.{
  process.on('exit', function () {

Run from command line (with mocha and mocha-given installed):

$ node runtests.js


Thanks to SinnerSchrader for their support and the time to work on this project.

Something went wrong with that request. Please try again.