Ruby's minitest assertions, now available to JavaScript, ready to be consumed with mocha (or another test runner). Rubyists must feel at home, and everybody should have clean and readable tests, running in a large spectrum of engines.
Quick Start
Assuming we'd like to test this object:
var Meme = function () {};
Meme.prototype = {
i_can_has_cheezburger: function () {
return "OHAI!";
},
will_it_blend: function () {
return "YES!";
}
};
var assert = require("minitest").assert;
var refute = require("minitest").refute;
var meme = new Meme();
assert.equal("OHAI!", meme.i_can_has_cheezburger());
refute.match(/^no/i, meme.will_it_blend());
require("minitest/spec");
var meme = new Meme();
meme.i_can_has_cheezburger().mustEqual("OHAI!");
meme.will_it_blend().wontMatch(/^no/i);
var expect = require("minitest").expect;
var meme = new Meme();
expect(meme.i_can_has_cheezburger()).toEqual("OHAI!");
expect(meme.will_it_blend()).toNotMatch(/^no/i);
require("minitest/spec");
var Mock = require("minitest/mock");
var MemeAsker = function (meme) {
this.meme = meme;
};
MemeAsker.prototype.ask = function (question) {
var method = question.replace(/ /g, "_");
return this.meme[method];
};
var meme = new Mock();
var memeAsker = new MemeAsker(meme);
meme.expect("will_it_blend", "NO!");
memeAsker.ask("will it blend").mustEqual("NO!");
meme.verify();
var assert = require("minitest").assert;
require("minitest/stub");
var meme = new Meme();
meme.stub("will_it_blend", "NO!", function () {
assert.equal("NO!", meme.will_it_blend());
});
// stub goes away once the callback is done
assert.equal("YES!", meme.will_it_blend());
require('minitest/promised');
var assert = require("minitest").assert;
var deferred = Q.defer();
assert.equal("YES!", deferred.promise);
deferred.resolve("YES!");
// we can still use normal assertions
assert(true);
About
Minitest.js focuses on the tests: assertions, expectations (seamlessly built on the assertions) and mocks; and leaves alone the suite and runner parts, because there are some great solutions already for running tests in JavaScript, like mocha.
The assertions should be a direct port of their ruby counterparts, but modified to cope with javascript's weirdness, and thus somehow conform to the CommonJS Unit Testing/1.0 test suite (eg: deep equality).
Install
# Node
npm install git://github.com/ysbaddaden/minitest-js.git
# Bower
bower install minitest
Browser Support
Minitest.js assumes that your browser support ECMAScript 5, either natively or through a polyfill and can be used in any browser, back to Internet Explorer 6.
Spec expectations (eg: mustEqual
), on the other end, do require native support
for Object.defineProperty
, which restrict support to modern engines only (eg:
Node.js, Internet Explorer 10+, Firefox 12+, etc). But thanks to a little hack,
we can support Firefox 3.6 and Internet Explorer 9 (unless we find another bug).