/test-commonjs

"CommonJS test runner for Unit Testing/1.1

Primary LanguageJavaScript

CommonJS Test Runner

Implementation of test runner compatible with CommonJS Unit Testing/1.1

Testing

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 tests node path/to/test/group.js

####Example####

Gist version

  • 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.