QUnit testing framework for nodejs.
http://qunitjs.com
http://github.com/jquery/qunit
Features
- cli
- testrunner api
- test coverage via istanbul
- tests inside of one testfile run synchronous, but every testfile runs parallel
- tests from each file run in its own spawned node process
- same API for client and server side code (original QUnit is used)
- the simplest API of the world, especially for asynchronous testing
- you can write tests in TDD or BDD style depending on your task and test type
- you can run the same tests in browser if there is no dependencies to node
- generators support
Installation
$ npm i qunit
API
http://api.qunitjs.com
The only exception
QUnit.module(name, lifecycle)
Usage
Command line
Read full cli api doc using "--help" or "-h":
$ qunit -h
$ qunit -c ./code.js -t ./tests.js
By default, code and dependencies are added to the global scope. To specify
requiring them into a namespace object, prefix the path or module name with the
variable name to be used for the namespace object, followed by a colon:
$ qunit -c code:./code.js -d utils:utilmodule -t ./time.js
via api
var testrunner = require("qunit");
{
log: {
assertions: true,
errors: true,
tests: true,
summary: true,
globalSummary: true,
coverage: true,
globalCoverage: true,
testing: true
},
coverage: false,
deps: null,
namespace: null,
maxBlockDuration: 1000
}
testrunner.options.optionName = value;
testrunner.setup({
log: {
summary: true
}
});
testrunner.run({
code: "/path/to/your/code.js",
tests: "/path/to/your/tests.js"
}, callback);
testrunner.run({
code: {path: "/path/to/your/code.js", namespace: "code"},
tests: "/path/to/your/tests.js"
}, callback);
testrunner.run({
code: "/path/to/your/code.js",
tests: ["/path/to/your/tests.js", "/path/to/your/tests1.js"]
}, callback);
testrunner.run([
{
code: "/path/to/your/code.js",
tests: "/path/to/your/tests.js"
},
{
code: "/path/to/your/code.js",
tests: "/path/to/your/tests.js"
}
], callback);
testrunner.run({
code: "/path/to/your/code.js",
tests: "/path/to/your/tests.js"
}, function(err, report) {
console.dir(report);
});
testrunner.run({
deps: "/path/to/your/dependency.js",
code: "/path/to/your/code.js",
tests: "/path/to/your/tests.js"
}, callback);
testrunner.run({
deps: "modulename",
code: "/path/to/your/code.js",
tests: "/path/to/your/tests.js"
}, callback);
testrunner.run({
deps: {path: "utilmodule", namespace: "utils"},
code: "/path/to/your/code.js",
tests: "/path/to/your/tests.js"
}, callback);
testrunner.run({
deps: ["/path/to/your/dependency1.js", "/path/to/your/dependency2.js"],
code: "/path/to/your/code.js",
tests: "/path/to/your/tests.js"
}, callback);
Writing tests
QUnit API and code which have to be tested are already loaded and attached to the global context.
Some tests examples
test("a basic test example", function () {
ok(true, "this test is fine");
var value = "hello";
equal("hello", value, "We expect value to be hello");
});
QUnit.module("Module A");
test("first test within module", 1, function () {
ok(true, "a dummy");
});
test("second test within module", 2, function () {
ok(true, "dummy 1 of 2");
ok(true, "dummy 2 of 2");
});
QUnit.module("Module B", {
setup: function () {
},
teardown: function () {
}
});
test("some other test", function () {
expect(2);
equal(true, false, "failing test");
equal(true, true, "passing test");
});
QUnit.module("Module C", {
setup: function() {
this.options = { test: 123 };
}
});
test("this test is using shared environment", 1, function () {
deepEqual({ test: 123 }, this.options, "passing test");
});
test("this is an async test example", function () {
expect(2);
stop();
setTimeout(function () {
ok(true, "finished async test");
strictEqual(true, true, "Strict equal assertion uses ===");
start();
}, 100);
});
Generators support
test("my async test with generators", function* () {
var data = yield asyncFn();
equal(data, {a: 1}, 'generators work');
});
Run tests
$ npm i
$ npm test
Coverage
Code coverage via Istanbul. To utilize, install istanbul
and set option coverage: true
or give a path where to store report coverage: {dir: "coverage/path"}
or pass --cov
parameter in the shell. Coverage calculations based on code and tests passed to node-qunit
.