Skip to content
TDD framework for node
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


TDD framework for nodejs.

Expresso is a 1-hour creation, for TDD and nodejs. I was frustrated with what was currently available, I wanted something fast (not executed serially), with reasonable reporting, drop-dead simple async support (you dont have to do anything!), and code coverage.


  • intuitive async support
  • intuitive test runner executable
  • test coverage support and reporting
  • uses the assert module
  • light-weight


To install both expresso and node-jscoverage run:

$ make install

To install expresso alone (no build required) run:

$ make install-expresso

Install via kiwi:

$ kiwi install expresso


To define tests we simply export several functions:

module.exports = {
  'test String#length': function(assert){
    assert.equal(6, 'foobar');

Async example:

exports['test async] = function(assert){
  }, 200);
  }, 200);
  return 2;

Executable Usage

To run a single test suite (file) run:

$ expresso test/a.test.js

To run several suites we may simply append another:

$ expresso test/a.test.js test/b.test.js

Globbing is of course possible as well:

$ expresso test/*

When expresso is called without any files, test/* is the default, so the following is equivalent to the command above:

$ expresso

The test results for the command above will look similar to below, displaying the test progress, suite name, passes, failures, and duration:

%100 a.test 3 0 in 0.002 seconds
%100 b.test 1 0 in 0.000 seconds

If you wish to unshift a path to require.paths before running tests, you may use the -I or --include flag.

$ expresso --include lib test/*

The previous example is typically what I would recommend, since expresso supports test coverage via node-jscoverage (bundled with expresso), so you will need to expose an instrumented version of you library.

To instrument your library, simply run node-jscoverage, passing the src and dest directories:

$ node-jscoverage lib lib-cov

Now we can run our tests again, using the lib-cov directory that has been instrumented with coverage statements:

$ expresso -I lib-cov test/*

The output will look similar to below, depending on your test coverage of course :)

Test Coverage
| filename                       | coverage | LOC  | SLOC | missed |
| a.js                           |    90.00 |   26 |   10 |      1 |
| b.js                           |   100.00 |   12 |    5 |      0 |
                                 |    93.33 |   38 |   15 |      1 |

To make this process easier expresso has the -c or --cov which essentiall does the same as the two commands above. The following two commands will run the same tests, however one will auto-instrument, and unshift lib-cov, and the other will run tests normally:

$ expresso -I lib test/*
$ expresso -I lib --cov test/*

Currently coverage is bound to the lib directory, however in the future --cov will most likely accept a path.

Something went wrong with that request. Please try again.