Implementation of test runner compatible with CommonJS Unit Testing/1.1
In order to make your package testable from npm you should:
- Create a directory in your package root.
- Define test directory in package descriptor under
directories
section. - Define test script in package descriptor under
scripts
section. - Define dependency on this package (It's name is "test" in npm registry).
- Write your tests
- Test your package by running all tests
npm test mypackage@active
or run individual testsnode path/to/test/group.js
####Example####
-
package.json
{ "name": "mypackage", "version": "0.7.0", "description": "Sample package", "scripts": { "test": "node test/all.js" }, "dependencies": { "test": ">=0.0.5" } }
-
test/fail-slow.js
// if test function expects second named argument it will be executed // in async mode and test will be complete only after callback is called exports['test my async foo'] = function(assert, done) { var http = require('http') var google = http.createClient(80, 'www.jeditoolkit.com') var request = google.request('GET', '/', {'host': 'www.jeditoolkit.com'}) request.end() request.on('response', function (response) { assert.equal(response.statusCode, 302, 'must redirect') // will log result response.setEncoding('utf8') response.on('data', function (chunk) { assert.notEqual(chunk, 'helo world', 'must be something more inteligent') done() // telling test runner that we're done with this test }) }) } if (module == require.main) require('test').run(exports)
-
test/fail-slow.js
// using assert passed to the test function that just logs failures exports['test that logs all failures'] = function(assert) { assert.equal(2 + 2, 5, 'assert failure is logged') assert.equal(3 + 2, 5, 'assert pass is logged') } if (module == require.main) require('test').run(exports)
-
test/fail-fast.js
// using nodejs's build in asserts that throw on failure var assert = require('assert') exports['test that stops execution on first failure'] = function() { assert.equal(2 + 2, 5, 'assert fails and test execution stop here') assert.equal(3 + 2, 5, 'will never pass this since test failed above') } if (module == require.main) require('test').run(exports) test/custom-assert.js var AssertBase = require('assert').Assert var AssertDescriptor = { constructor: { value: Assert }, inRange: { value: function (lower, inner, upper, message) { if (lower < inner && inner < upper) { this.fail({ actual: inner, expected: lower + '> ' + ' < ' + upper, operator: "inRange", message: message }) } else { this.pass(message); } }, enumerable: true } } function Assert() { return Object.create(AssertBase.apply(null, arguments), AssertDescriptor) } // bundling custom asserts with test suite exports.Assert = Assert exports['test with custom asserts'] = function(assert) { assert.inRange(2, 3, 5, 'passes assert and logs') assert.equal(3 + 2, 5, 'assert pass is logged') } if (module == require.main) require('test').run(exports)
For more examples checkout tests for this package and for more details see the CommonJS Unit Testing/1.1 specification.