minijest

A testing library for JavaScript

MiniJest

A Node testing framework inspired by MiniTest for Ruby.

I like the idea of making tests methods on an object. I find it acts as a nice natural divider to make sure each test file isn't doing too much.

var MiniJest = require('./index.js');
 
var testMyThing = new MiniJest.Base();
 
// all tests are added to the fn object 
testMyThing.fn.testTwoPlusTwoEqualsFour = function() {
  this.assertEqual(2 + 3, 4);
};
 
// nothing happens without this line! 
testMyThing.run();

To run your tests, just execute them through Node:

$ node myTest.js

You can change the reporter like so:

var MiniJest = require('./index.js');
 
var testMyThing = new MiniJest.Base();
 
testMyThing.reporter.onSuccess = function(testName) {
    // called when test passes 
};
 
testMyThing.reporter.onError = function(err) {
    // called when test fails 
};
 
testMyThing.reporter.onAsyncTimeout = function(testName) {
    // called when an async test times out 
};
 
testMyThing.run();
var MiniJest = require('./index.js');
 
var testMyThing = new MiniJest.Base();
 
// a new matcher that always fails 
// matchers added to the matchers object 
// a failed matcher is expected to throw an error 
testMyThing.matchers.alwaysFailsAssertion = function() {
    throw new Error('test failed');
};
 
testMyThing.fn.testCustomMatcher = function() {
    this.alwaysFailsAssertion();
};
 
testMyThing.run();

MiniJest handles async a little differently. An async test takes a callback, but you pass that callback a function in which you make your assertions:

testMyThing.fn.asyncTest = function(done) {
  setTimeout(function() {
    var res = 5;
    done(function() {
      this.assertEqual(res, 5);
    });
  }, 500);
};

This seems a little odd but is actually quite a nice way of doing things in practice.