node package manager
It’s your turn. Help us improve JavaScript. Take the 2017 JavaScript Ecosystem Survey »



Simple synchronous and asynchronous testing, using the assertions of your choice.

Written (and most easily used) in CoffeeScript.

Basic usage

Testify = require "../src/testify"
assert = require "assert"
Testify.test "straightforward synchronous testing", (context) ->
  context.test "arithmetic", ->
    assert.equal (2 + 2), 4
  context.test "strings", ->
    assert.equal "foo".toUpperCase(), "FOO"
  context.test "error handling", ->
    error = new Error "I failed."


basic usage output

Asynchronous usage

some_async_call = (callback) ->
  process.nextTick ->
    callback null, "pie"
another_async_call = (input, callback) ->
  process.nextTick ->
    callback null, ["bacon", "cheese", "pie"]
Testify.test "a suite of tests", (context) ->
  # When you need to test the results of an asynchronous function,
  # give context.test() a function that takes an argument.  You can
  # then use that argument as a new context for nesting tests.
  context.test "testing something asynchronous", (context) ->
    some_async_call (error, result1) ->
      # If you give context.test() a function that takes no arguments,
      # the test is required to be synchronous, and considered to have
      # passed if the function runs without throwing an error.
      context.test "result makes me happy", ->
        assert.equal(result1, "pie")
      context.test "a nested asynchronous test", (context) ->
        another_async_call result1,  (error, result2) ->
          context.test "result makes me deeply happy", ->
            assert.deepEqual result2, ["bacon", "cheese", "pie"]
      context.test "shortcut for passing an async test", (context) ->
        process.nextTick ->
          # you can call context.pass() instead of using a synchronous test
      context.test "shortcut for failing an async test", (context) ->
        process.nextTick ->
"I just couldn't go on")


async usage output

Run your test files with the coffee executable, or by requiring them, or using bin/testify [--color].

coffee path/to/
bin/testify -c path/to/


Tests for Shred, an HTTP client

You can also use test nesting with entirely synchronous work, as a way to structure the test results:

Shred's header processing test