包详细信息

tape

tape-testing2.4mMIT5.9.0

tap-producing test harness for node and browsers

tap, test, harness, assert

自述文件

tape Version Badge

TAP-producing test harness for node and browsers

github actions coverage License Downloads

npm badge

tape

example

var test = require('tape');

test('timing test', function (t) {
    t.plan(2);

    t.equal(typeof Date.now, 'function');
    var start = Date.now();

    setTimeout(function () {
        t.equal(Date.now() - start, 100);
    }, 100);
});

test('test using promises', async function (t) {
    const result = await someAsyncThing();
    t.ok(result);
});
$ node example/timing.js
TAP version 13
# timing test
ok 1 should be strictly equal
not ok 2 should be strictly equal
  ---
    operator: equal
    expected: 100
    actual:   107
  ...

1..2
# tests 2
# pass  1
# fail  1

usage

You always need to require('tape') in test files. You can run the tests by usual node means (require('test-file.js') or node test-file.js). You can also run tests using the tape binary to utilize globbing, on Windows for example:

$ tape tests/**/*.js

tape's arguments are passed to the glob module. If you want glob to perform the expansion on a system where the shell performs such expansion, quote the arguments as necessary:

$ tape 'tests/**/*.js'
$ tape "tests/**/*.js"

If you want tape to error when no files are found, pass --strict:

$ tape --strict 'tests/**/*.js'

Preloading modules

Additionally, it is possible to make tape load one or more modules before running any tests, by using the -r or --require flag. Here's an example that loads babel-register before running any tests, to allow for JIT compilation:

$ tape -r babel-register tests/**/*.js

Depending on the module you're loading, you may be able to parameterize it using environment variables or auxiliary files. Babel, for instance, will load options from .babelrc at runtime.

The -r flag behaves exactly like node's require, and uses the same module resolution algorithm. This means that if you need to load local modules, you have to prepend their path with ./ or ../ accordingly.

For example:

$ tape -r ./my/local/module tests/**/*.js

Please note that all modules loaded using the -r flag will run before any tests, regardless of when they are specified. For example, tape -r a b -r c will actually load a and c before loading b, since they are flagged as required modules.

things that go well with tape

tape maintains a fairly minimal core. Additional features are usually added by using another module alongside tape.

pretty reporters

The default TAP output is good for machines and humans that are robots.

If you want a more colorful / pretty output there are lots of modules on npm that will output something pretty if you pipe TAP into them:

To use them, try node test/index.js | tap-spec or pipe it into one of the modules of your choice!

uncaught exceptions

By default, uncaught exceptions in your tests will not be intercepted, and will cause tape to crash. If you find this behavior undesirable, use tape-catch to report any exceptions as TAP errors.

other

command-line flags

While running tests, top-level configurations can be passed via the command line to specify desired behavior.

Available configurations are listed below:

--require

Alias: -r

This is used to load modules before running tests and is explained extensively in the preloading modules section.

--ignore

Alias: -i

This flag is used when tests from certain folders and/or files are not intended to be run. The argument is a path to a file that contains the patterns to be ignored. It defaults to .gitignore when passed with no argument.

tape -i .ignore '**/*.js'

An error is thrown if the specified file passed as argument does not exist.

--ignore-pattern

Same functionality as --ignore, but passing the pattern directly instead of an ignore file. If both --ignore and --ignore-pattern are given, the --ignore-pattern argument is appended to the content of the ignore file.

tape --ignore-pattern 'integration_tests/**/*.js' '**/*.js'

--no-only

This is particularly useful in a CI environment where an only test is not supposed to go unnoticed.

By passing the --no-only flag, any existing only test causes tests to fail.

tape --no-only **/*.js

Alternatively, the environment variable NODE_TAPE_NO_ONLY_TEST can be set to true to achieve the same behavior; the command-line flag takes precedence.

methods

The assertion methods in tape are heavily influenced or copied from the methods in node-tap.

var test = require('tape')

test([name], [opts], cb)

Create a new test with an optional name string and optional opts object. cb(t) fires with the new test object t once all preceding tests have finished. Tests execute serially.

Available opts options are:

  • opts.skip = true/false. See test.skip.
  • opts.timeout = 500. Set a timeout for the test, after which it will fail. See test.timeoutAfter.
  • opts.objectPrintDepth = 5. Configure max depth of expected / actual object printing. Environmental variable NODE_TAPE_OBJECT_PRINT_DEPTH can set the desired default depth for all tests; locally-set values will take precedence.
  • opts.todo = true/false. Test will be allowed to fail.

If you forget to t.plan() out how many assertions you are going to run and you don't call t.end() explicitly, or return a Promise that eventually settles, your test will hang.

If cb returns a Promise, it will be implicitly awaited. If that promise rejects, the test will be failed; if it fulfills, the test will end. Explicitly calling t.end() while also returning a Promise that fulfills is an error.

test.skip([name], [opts], cb)

Generate a new test that will be skipped over.

test.onFinish(fn)

The onFinish hook will get invoked when ALL tape tests have finished right before tape is about to print the test summary.

fn is called with no arguments, and its return value is ignored.

test.onFailure(fn)

The onFailure hook will get invoked whenever any tape tests has failed.

fn is called with no arguments, and its return value is ignored.

t.plan(n)

Declare that n assertions should be run. t.end() will be called automatically after the nth assertion. If there are any more assertions after the nth, or after t.end() is called, they will generate errors.

t.end(err)

Declare the end of a test explicitly. If err is passed in t.end will assert that it is falsy.

Do not call t.end() if your test callback returns a Promise.

t.teardown(cb)

Register a callback to run after the individual test has completed. Multiple registered teardown callbacks will run in order. Useful for undoing side effects, closing network connections, etc.

t.fail(msg)

Generate a failing assertion with a message msg.

t.pass(msg)

Generate a passing assertion with a message msg.

t.timeoutAfter(ms)

Automatically timeout the test after X ms.

t.skip(msg)

Generate an assertion that will be skipped over.

t.ok(value, msg)

Assert that value is truthy with an optional description of the assertion msg.

Aliases: t.true(), t.assert()

t.notOk(value, msg)

Assert that value is falsy with an optional description of the assertion msg.

Aliases: t.false(), t.notok()

t.error(err, msg)

Assert that err is falsy. If err is non-falsy, use its err.message as the description message.

Aliases: t.ifError(), t.ifErr(), t.iferror()

t.equal(actual, expected, msg)

Assert that Object.is(actual, expected) with an optional description of the assertion msg.

Aliases: t.equals(), t.isEqual(), t.strictEqual(), t.strictEquals(), t.is()

t.notEqual(actual, expected, msg)

Assert that !Object.is(actual, expected) with an optional description of the assertion msg.

Aliases: t.notEquals(), t.isNotEqual(), t.doesNotEqual(), t.isInequal(), t.notStrictEqual(), t.notStrictEquals(), t.isNot(), t.not()

t.looseEqual(actual, expected, msg)

Assert that actual == expected with an optional description of the assertion msg.

Aliases: t.looseEquals()

t.notLooseEqual(actual, expected, msg)

Assert that actual != expected with an optional description of the assertion msg.

Aliases: t.notLooseEquals()

t.deepEqual(actual, expected, msg)

Assert that actual and expected have the same structure and nested values using node's deepEqual() algorithm with strict comparisons (===) on leaf nodes and an optional description of the assertion msg.

Aliases: t.deepEquals(), t.isEquivalent(), t.same()

t.notDeepEqual(actual, expected, msg)

Assert that actual and expected do not have the same structure and nested values using node's deepEqual() algorithm with strict comparisons (===) on leaf nodes and an optional description of the assertion msg.

Aliases: t.notDeepEquals, t.notEquivalent(), t.notDeeply(), t.notSame(), t.isNotDeepEqual(), t.isNotDeeply(), t.isNotEquivalent(), t.isInequivalent()

t.deepLooseEqual(actual, expected, msg)

Assert that actual and expected have the same structure and nested values using node's deepEqual() algorithm with loose comparisons (==) on leaf nodes and an optional description of the assertion msg.

t.notDeepLooseEqual(actual, expected, msg)

Assert that actual and expected do not have the same structure and nested values using node's deepEqual() algorithm with loose comparisons (==) on leaf nodes and an optional description of the assertion msg.

t.throws(fn, expected, msg)

Assert that the function call fn() throws an exception. expected, if present, must be a RegExp, Function, or Object. The RegExp matches the string representation of the exception, as generated by err.toString(). For example, if you set expected to /user/, the test will pass only if the string representation of the exception contains the word user. Any other exception will result in a failed test. The Function could be the constructor for the Error type thrown, or a predicate function to be called with that exception. Object in this case corresponds to a so-called validation object, in which each property is tested for strict deep equality. As an example, see the following two tests--each passes a validation object to t.throws() as the second parameter. The first test will pass, because all property values in the actual error object are deeply strictly equal to the property values in the validation object.

    const err = new TypeError("Wrong value");
    err.code = 404;
    err.check = true;

    // Passing test.
    t.throws(
        () => {
            throw err;
        },
        {
            code: 404,
            check: true
        },
        "Test message."
    );

This next test will fail, because all property values in the actual error object are not deeply strictly equal to the property values in the validation object.

    const err = new TypeError("Wrong value");
    err.code = 404;
    err.check = "true";

    // Failing test.
    t.throws(
        () => {
            throw err;
        },
        {
            code: 404,
            check: true // This is not deeply strictly equal to err.check.
        },
        "Test message."
    );

This is very similar to how Node's assert.throws() method tests validation objects (please see the Node assert.throws() documentation for more information).

If expected is not of type RegExp, Function, or Object, or omitted entirely, any exception will result in a passed test. msg is an optional description of the assertion.

Please note that the second parameter, expected, cannot be of type string. If a value of type string is provided for expected, then t.throws(fn, expected, msg) will execute, but the value of expected will be set to undefined, and the specified string will be set as the value for the msg parameter (regardless of what actually passed as the third parameter). This can cause unexpected results, so please be mindful.

t.doesNotThrow(fn, expected, msg)

Assert that the function call fn() does not throw an exception. expected, if present, limits what should not be thrown, and must be a RegExp or Function. The RegExp matches the string representation of the exception, as generated by err.toString(). For example, if you set expected to /user/, the test will fail only if the string representation of the exception contains the word user. Any other exception will result in a passed test. The Function is the exception thrown (e.g. Error). If expected is not of type RegExp or Function, or omitted entirely, any exception will result in a failed test. msg is an optional description of the assertion.

Please note that the second parameter, expected, cannot be of type string. If a value of type string is provided for expected, then t.doesNotThrows(fn, expected, msg) will execute, but the value of expected will be set to undefined, and the specified string will be set as the value for the msg parameter (regardless of what actually passed as the third parameter). This can cause unexpected results, so please be mindful.

t.test(name, [opts], cb)

Create a subtest with a new test handle st from cb(st) inside the current test t. cb(st) will only fire when t finishes. Additional tests queued up after t will not be run until all subtests finish.

You may pass the same options that test() accepts.

t.comment(message)

Print a message without breaking the tap output. (Useful when using e.g. tap-colorize where output is buffered & console.log will print in incorrect order vis-a-vis tap output.)

Multiline output will be split by \n characters, and each one printed as a comment.

t.match(string, regexp, message)

Assert that string matches the RegExp regexp. Will fail when the first two arguments are the wrong type.

t.doesNotMatch(string, regexp, message)

Assert that string does not match the RegExp regexp. Will fail when the first two arguments are the wrong type.

t.capture(obj, method, implementation = () => {})

Replaces obj[method] with the supplied implementation. obj must be a non-primitive, method must be a valid property key (string or symbol), and implementation, if provided, must be a function.

Calling the returned results() function will return an array of call result objects. The array of calls will be reset whenever the function is called. Call result objects will match one of these forms:

  • { args: [x, y, z], receiver: o, returned: a }
  • { args: [x, y, z], receiver: o, threw: true }

The replacement will automatically be restored on test teardown. You can restore it manually, if desired, by calling .restore() on the returned results function.

Modeled after tap.

t.captureFn(original)

Wraps the supplied function. The returned wrapper has a .calls property, which is an array that will be populated with call result objects, described under t.capture().

Modeled after tap.

t.intercept(obj, property, desc = {}, strictMode = true)

Similar to t.capture()``, but can be used to track get/set operations for any arbitrary property. Calling the returnedresults()` function will return an array of call result objects. The array of calls will be reset whenever the function is called. Call result objects will match one of these forms:

  • { type: 'get', value: '1.2.3', success: true, args: [x, y, z], receiver: o }
  • { type: 'set', value: '2.4.6', success: false, args: [x, y, z], receiver: o }

If strictMode is true, and writable is false, and no get or set is provided, an exception will be thrown when obj[property] is assigned to. If strictMode is false in this scenario, nothing will be set, but the attempt will still be logged.

Providing both desc.get and desc.set are optional and can still be useful for logging get/set attempts.

desc must be a valid property descriptor, meaning that get/set are mutually exclusive with writable/value. Additionally, explicitly setting configurable to false is not permitted, so that the property can be restored.

t.assertion(fn, ...args)

If you want to write your own custom assertions, you can invoke these conveniently using this method.

function isAnswer(value, msg) {
    // eslint-disable-next-line no-invalid-this
    this.equal(value, 42, msg || 'value must be the answer to life, the universe, and everything');
};

test('is this the answer?', (t) => {
    t.assertion(isAnswer, 42); // passes, default message
    t.assertion(isAnswer, 42, 'what is 6 * 9?'); // passes, custom message
    t.assertion(isAnswer, 54, 'what is 6 * 9!'); // fails, custom message

    t.end();
});

var htest = test.createHarness()

Create a new test harness instance, which is a function like test(), but with a new pending stack and test state.

By default the TAP output goes to console.log(). You can pipe the output to someplace else if you htest.createStream().pipe() to a destination stream on the first tick.

test.only([name], [opts], cb)

Like test([name], [opts], cb) except if you use .only this is the only test case that will run for the entire process, all other test cases using tape will be ignored.

Check out how the usage of the --no-only flag could help ensure there is no .only test running in a specified environment.

var stream = test.createStream(opts)

Create a stream of output, bypassing the default output stream that writes messages to console.log(). By default stream will be a text stream of TAP output, but you can get an object stream instead by setting opts.objectMode to true.

tap stream reporter

You can create your own custom test reporter using this createStream() api:

var test = require('tape');
var path = require('path');

test.createStream().pipe(process.stdout);

process.argv.slice(2).forEach(function (file) {
    require(path.resolve(file));
});

You could substitute process.stdout for whatever other output stream you want, like a network connection or a file.

Pass in test files to run as arguments:

$ node tap.js test/x.js test/y.js
TAP version 13
# (anonymous)
not ok 1 should be strictly equal
  ---
    operator: equal
    expected: "boop"
    actual:   "beep"
  ...
# (anonymous)
ok 2 should be strictly equal
ok 3 (unnamed assert)
# wheee
ok 4 (unnamed assert)

1..4
# tests 4
# pass  3
# fail  1

object stream reporter

Here's how you can render an object stream instead of TAP:

var test = require('tape');
var path = require('path');

test.createStream({ objectMode: true }).on('data', function (row) {
    console.log(JSON.stringify(row))
});

process.argv.slice(2).forEach(function (file) {
    require(path.resolve(file));
});

The output for this runner is:

$ node object.js test/x.js test/y.js
{"type":"test","name":"(anonymous)","id":0}
{"id":0,"ok":false,"name":"should be strictly equal","operator":"equal","actual":"beep","expected":"boop","error":{},"test":0,"type":"assert"}
{"type":"end","test":0}
{"type":"test","name":"(anonymous)","id":1}
{"id":0,"ok":true,"name":"should be strictly equal","operator":"equal","actual":2,"expected":2,"test":1,"type":"assert"}
{"id":1,"ok":true,"name":"(unnamed assert)","operator":"ok","actual":true,"expected":true,"test":1,"type":"assert"}
{"type":"end","test":1}
{"type":"test","name":"wheee","id":2}
{"id":0,"ok":true,"name":"(unnamed assert)","operator":"ok","actual":true,"expected":true,"test":2,"type":"assert"}
{"type":"end","test":2}

A convenient alternative to achieve the same:

// report.js
var test = require('tape');

test.createStream({ objectMode: true }).on('data', function (row) {
    console.log(JSON.stringify(row)) // for example
});

and then:

$ tape -r ./report.js **/*.test.js

install

With npm do:

npm install tape --save-dev

troubleshooting

Sometimes t.end() doesn’t preserve the expected output ordering.

For instance the following:

var test = require('tape');

test('first', function (t) {

  setTimeout(function () {
    t.ok(1, 'first test');
    t.end();
  }, 200);

  t.test('second', function (t) {
    t.ok(1, 'second test');
    t.end();
  });
});

test('third', function (t) {
  setTimeout(function () {
    t.ok(1, 'third test');
    t.end();
  }, 100);
});

will output:

ok 1 second test
ok 2 third test
ok 3 first test

because second and third assume first has ended before it actually does.

Use t.plan() instead to let other tests know they should wait:

var test = require('tape');

test('first', function (t) {

+  t.plan(2);

  setTimeout(function () {
    t.ok(1, 'first test');
-    t.end();
  }, 200);

  t.test('second', function (t) {
    t.ok(1, 'second test');
    t.end();
  });
});

test('third', function (t) {
  setTimeout(function () {
    t.ok(1, 'third test');
    t.end();
  }, 100);
});

license

MIT

更新日志

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

v5.9.0 - 2024-09-15

Commits

  • [New] bin/tape: add --strict 4c97f54
  • [Fix] in engines that lack dynamic import, have some output 2d5c8dc
  • [Tests] use npm audit instead of aud 681d4bd
  • [Dev Deps] update auto-changelog b7bc72f
  • [Deps] update mock-property ecfb546
  • [Deps] update object-inspect 9a47aba
  • [readme] notLooseEqual(s) is not an alias for notDeepLooseEqual c827ac9
  • [readme] remove defunct badges 7880dd4
  • [Dev Deps] add missing peer dep 627d1e7

v5.8.1 - 2024-06-16

Fixed

  • [meta] fix URLs #608

Commits

  • [Fix] assertion: pass through assertion return value, for promises 2ad86d4

v5.8.0 - 2024-06-14

Fixed

  • [New] add t.assertion #555

Commits

  • [meta] update URLs 77cabeb
  • [New] allow TODO tests to be "ok" with env var TODO_IS_OK 6cd06f5
  • [Tests] strip node’s deprecation warnings 8d40837
  • [Tests] increase coverage aa7de58
  • [Refactor] Test: minor tweaks ce4ce8a
  • [meta] simplify exports d39cb8d
  • [Deps] update @ljharb/resumer, @ljharb/through, hasown 77952d0
  • [Tests] handle more stack trace variation in Node v0.8 d2f0778
  • [Deps] update array.prototype.every, string.prototype.trim 732268b
  • [Dev Deps] update @ljharb/eslint-config 7b39e14
  • [Refactor] test: reduce binding by using polyfill entrypoints 91a83b6
  • [Dev Deps] remove unused intl-fallback-symbol, is-core-module eafacf6
  • [Deps] update object-is 1b01656
  • [meta] simplify exports f9eac5b

v5.7.5 - 2024-02-14

Commits

  • [Fix] throws: fix crash when throwing primitives with a non-empty expected object 1b2681d
  • [Tests] clean up throws tests 9133c93
  • [Fix] default_stream: do not error on nullish data eff3725
  • [Fix] in IE 8, TypeError does not inherit from Error 93c1d12
  • [actions] remove redundant finisher 410e9e4
  • [Deps] update call-bind, hasown 82e7d71
  • [Deps] update @ljharb/resumer af2fe68
  • [Deps] update @ljharb/resumer bff9dad
  • [Deps] update @ljharb/through 5360d20
  • [Deps] update @ljharb/resumer ad0dd2e

v5.7.4 - 2024-01-24

Fixed

  • [Fix] handle native ESM URLs in at: #601

Commits

  • [Deps] update has-dynamic-import 1e50cb3

v5.7.3 - 2024-01-12

Commits

  • [Refactor] Test: cleaner at logic af4d109
  • [Fix] intercept: give a proper error message with a readonly Symbol property 4640a91
  • [Refactor] getHarness: avoid mutating opts, account for only one internal callsite for createExitHarness 19cfc8f
  • [Tests] Spawn processes during tests using execPath so that the tests pass on windows 4a57fbe
  • [Fix] createHarness: when no conf is provided, only should not throw 8a1cccc
  • [Fix] bin/tape: ignore options on windows a2b74f9
  • [Refactor] _assert: avoid reassigning arguments dc64c08
  • [Refactor] Results: use this instead of self 5f831b4
  • [Performance] avoid the extra call frame to new it 78fd0d6
  • [Dev Deps] update aud, npmignore ceabd99
  • [Tests] fix npm test on windows bcf6ce7
  • [Fix] stack trace path parsing on windows 9cbae8a
  • [Refactor] Results createStream: clean up _push handler 878a500
  • [Refactor] Test: a more precise check f6d30cf
  • [Deps] update object.assign 201e650
  • [Tests] ensure the import tests spawn properly d1987c0
  • [actions] skip engines check since bin/tape and the rest of the lib conflict 19af506
  • [Deps] update deep-equal 5d26485
  • [Deps] update mock-property d90c29a
  • [meta] add sideEffects flag 85f593b

v5.7.2 - 2023-10-20

Commits

  • [Refactor] use hasown instead of has 489736a
  • [Deps] update call-bind, mock-property, object-inspect de34703
  • [Tests] use through properly 56d7a8b

v5.7.1 - 2023-10-11

Commits

  • [Fix] default_stream: add handling for IE < 9 13f23ed
  • [Deps] update @ljharb/through, resolve 9135b40
  • Merge tag 'v4.17.0' e61cd40
  • [New] add t.intercept() e60aeca
  • [New] add t.capture and t.captureFn, modeled after tap 3d96d69
  • [Deps] switch from through and resumer to @ljharb/through and @ljharb/resumer a8a7d67
  • [Tests] simplify tests 83bc381
  • [Performance] use inline typeof c45db4e
  • [Deps] update minimist, resolve, string.prototype.trim feee094
  • [Dev Deps] update @ljharb/eslint-config, array.prototype.flatmap, aud 7123111
  • Revert "[meta] ensure not-in-publish‘s absence does not fail anything" 92aaa51
  • [Dev Deps] pin jackspeak since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 a576f8d

v5.7.0 - 2023-09-21

Commits

  • [New] add t.intercept() 5d37060
  • [New] add t.capture and t.captureFn, modeled after tap 9e21f7a
  • [Refactor] prefer second .then arg over .catch 135a952
  • [Performance] use inline typeof 5ba89c9
  • [Deps] update array.prototype.every, glob, string.prototype.trim 4e2db4d
  • [Dev Deps] update array.prototype.flatmap df46769
  • Revert "[meta] ensure not-in-publish‘s absence does not fail anything" 1b3e0b1

v5.6.6 - 2023-07-18

Commits

  • [Deps] switch from through and resumer to @ljharb/through and @ljharb/resumer c99680a

v5.6.5 - 2023-07-12

Commits

  • [Fix] Results: show a skip string on tests, not just on assertions 9bbbcfe
  • [Deps] update deep-equal 109a791

v5.6.4 - 2023-07-01

Commits

  • [Fix] throws: avoid crashing on a nonconfigurable or nonextensible expected 0731b5f
  • [Tests] simplify tests c656ee5
  • [Refactor] Test: skip binding for a non-function value e244e64
  • [Performance] use call-bind for autobinding 70de437
  • [actions] update rebase action 834453c
  • [Deps] update defined, minimist, object-inspect, string.prototype.trim 01edce8
  • [Dev Deps] update @ljharb/eslint-config, array.prototype.flatmap, aud 1b3ad24
  • [Dev Deps] update @ljharb/eslint-config, aud a6a5eee
  • [Deps] update deep-equal 2043b2e
  • [readme] Link to explain what TAP is 26a75bb
  • [Deps] update minimist 7e7c3d0
  • [readme] improve t.throws description for Function c1b619d
  • [Dev Deps] pin jackspeak since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 0e80800
  • Merge tag 'v4.16.2' d5d675d
  • [meta] add missing npmrc config 15e2175

v5.6.3 - 2023-01-15

v5.6.2 - 2023-01-15

Fixed

  • [New] bin/tape: add --ignore-pattern flag #586

Commits

  • [eslint] fix indentation b035590
  • [meta] add auto-changelog b467b85
  • [eslint] enforce no-use-before-define 87deb68
  • [eclint] fix editorconfig ce81cbe
  • [eslint] clean up config a bit 3171edd
  • [Tests] stackTrace: use the common getDiag utility 65df5a4
  • [Fix] throws: avoid crashing on a nonconfigurable or nonextensible expected 0cd7a2c
  • [meta] fix repo URLs 85d86a4
  • Revert "[Tests] handle a broken error cause in node 16.9/16.10" 775ba37
  • [meta] use npmignore to autogenerate an npmignore file 1645abb
  • [eslint] enable func-style 75c0c3a
  • [actions] update rebase action b3d724e
  • [Deps] update array.prototype.every, deep-equal, string.prototype.trim e9c9aba
  • [Deps] update defined, minimist, resolve 83695c0
  • [Deps] update deep-equal, object-inspect 09906f3
  • [Dev Deps] update @ljharb/eslint-config, aud afd8f64
  • [Dev Deps] update array.prototype.flatmap 8b8bf07
  • [Dev Deps] update aud f0fe7c0
  • [Dev Deps] update tap-parser 2f61eac
  • Merge tag 'v4.16.1' 96ff863
  • [readme] fix version badge 20ea48d

v5.6.1 - 2022-09-19

Commits

  • [eslint] fix indentation 2151e06
  • [meta] add auto-changelog 86cbbd1
  • [eslint] enforce no-use-before-define f8a8a7f
  • [meta] fix repo URLs a9ae3c2
  • [Tests] stackTrace: use the common getDiag utility 298cb80
  • [eslint] enable func-style 98b9623
  • [New] bin/tape: include the exact arg when there are no glob results; use require on --require files 6a1ce43
  • [eslint] clean up config a bit 67ad201
  • [meta] create FUNDING.yml 5b4752f
  • [Refactor] bin/tape: make it a bit more functional, for easier v5 backporting fbdbfc9
  • [Deps] update glob, object-inspect, resolve, string.prototype.trim 6a3c200
  • [Dev Deps] update @ljharb/eslint-config, array.prototype.flatmap, es-value-fixtures, falafel 934d49b
  • [Tests] fix no_only tests on Windows f35f71b
  • Revert "[Tests] handle a broken error cause in node 16.9/16.10" 23fac16
  • [Robustness] test observably looks up exec on the object 4575ca4
  • [meta] add SECURITY.md 7b0c901
  • [meta] add missing npmrc config 5d11d84
  • [Deps] update object.assign 3327fdd
  • [readme] fix version badge 74e6c9e
  • Merge tag 'v4.16.0' 4a44a7e

v5.6.0 - 2022-08-16

Commits

  • [Tests] handle a broken error cause in node 16.9/16.10 53d9e18
  • [meta] use npmignore to autogenerate an npmignore file 12cc602
  • [New] bin/tape: include the exact arg when there are no glob results; use require.resolve on --require files e23ec12
  • [meta] create FUNDING.yml f7e3161
  • [Robustness] test observably looks up exec on the object 9dbe9ad
  • [meta] remove unused travis.yml file 5a52443
  • [Deps] update glob, object-inspect, object.assign f6f39a2
  • [Dev Deps] update @ljharb/eslint-config, array.prototype.flatmap, es-value-fixtures 6bc8c38
  • [meta] ensure prelint works on windows 48896e8
  • [Tests] fix no_only tests on Windows 3e7b2ae
  • [Robustness] test observably looks up exec on the object 330f8d5
  • [Dev Deps] update eslint, @ljharb/eslint-config 3960ccf
  • [meta] add SECURITY.md 7d31894
  • [meta] improve prelint script when no .git dir is present 7c6dbbd
  • [Dev Deps] update es-value-fixtures 6b8e118
  • [Fix] in node v0.4, stream.pipe returns undefined 83d4da8
  • [Deps] update string.prototype.trim 1a245c6
  • Merge tag 'v4.15.1' b2d547a
  • [Deps] update minimist 64677e0

v5.5.3 - 2022-04-08

Commits

  • [Robustness] test observably looks up exec on the object fa84c85
  • [meta] ensure prelint works on windows bf34f60
  • [meta] improve prelint script when no .git dir is present 5f78134
  • [Deps] update minimist dabc6af

v5.5.2 - 2022-02-12

Commits

  • [Dev Deps] update @ljharb/eslint-config; pin eslint 99e7504
  • [Deps] unpin minimatch c18a68b

v5.5.1 - 2022-02-10

Commits

  • [Fix] pin minimatch to v3.0.4, due to a breaking change in v3.0.5 cbe0e40

v5.5.0 - 2022-01-26

Merged

  • [New] add --no-only flag/NODE_TAPE_NO_ONLY_TEST #572

Commits

  • Merge tag 'v4.15.0' a5a1434
  • [New] t.match/t.doesNotMatch: fail the test instead of throw on wrong input types. [a1c266b`](https://github.com/tape-testing/tape/commit/a1c266bf9577420702e1067c40a4a65677add63a)
  • [actions] reuse common workflows d3b4f46
  • [readme] port changes from v5 87f9b29
  • [Dev Deps] update eslint, @ljharb/eslint-config, aud 51ae645
  • [Fix] bin/tape: delay requires until needed b803fd8
  • [readme] hard wraps bad, soft wraps good 82af5ed
  • [Dev Deps] update eslint, @ljharb/eslint-config, safe-publish-latest, array.prototype.flatmap 3287a68
  • [actions] update codecov uploader 8d6aa6c
  • [Tests] handle carriage returns in stack traces on Windows f79acdf
  • [Deps] update glob, is-regex, string.prototype.trim 470ca1c
  • [Tests] handle a broken error cause in node 16.9/16.10 8594f3b
  • [meta] better eccheck command fe6978d
  • [Deps] update object-inspect, resolve 50ea080
  • [meta] Exclude fs from browser bundles (#565) 418dc94
  • [Dev Deps] update eslint b0c8ed3
  • [Tests] handle a broken error cause in node 16.9/16.10 ca1b906
  • [meta] fix prelint so it does not fail outside of a git repo a09133e
  • [meta] fix prelint so it does not fail outside of a git repo b9959f8
  • [Robustness] use cached .test 86ec0b2

v5.4.1 - 2022-01-15

Commits

  • [Fix] avoid failing in ES3 engines that lack Object.keys, and .every dfc5f39
  • [Dev Deps] update eslint, @ljharb/eslint-config, aud 61446b9
  • [Robustness] use cached .test 096a9e0
  • [meta] better eccheck command bc4666b

v5.4.0 - 2021-12-25

Commits

v5.3.2 - 2021-11-15

Fixed

  • [Tests] handle v8 6.9 changing an error message #562

Commits

v5.3.1 - 2021-08-06

Merged

  • [New] add .teardown() on t instances #546
  • [readme] add tape-describe to 'other' section #523

Fixed

  • [New] add .teardown() on t instances (#546) #531
  • [readme] add tape-describe to 'other' section (#523) #522

Commits

  • [Tests] make stripFullStack output an array of lines, for better failure messages f299759
  • [eslint] fully enable @ljharb eslint config 836610d
  • [actions] use node/install instead of node/run; use codecov action 46aff81
  • [readme] improve t.throws documentation b36f816
  • [Fix] bin/tape: delay requires until needed c8f3ce3
  • [Refactor] avoid reassigning arguments 5c4052f
  • [Tests] add test case for #519 for test.comment() in createStream/objectMode context 1700642
  • [Refactor] use call-bind/callBound instead of function-bind directly 967b73f
  • [readme] Another way to create custom reporters d81f9f6
  • [meta] do not publish github action workflow files 6bb3496
  • [Refactor] remove unused line, unneeded var initialization; add missing new da0cdf1
  • [Refactor] remove use of legacy exports a04439c
  • [Deps] update glob, is-regex, object-inspect, resolve, string.prototype.trim 6e71e6e
  • [eslint] remove useless regex escapes 1515ff4
  • [readme] remove travis badge; add actions and codecov badges 57a7cc9
  • [meta] run aud in posttest 3907aa5
  • [Refactor] generalize error message from calling .end more than once da8ca46
  • [Tests] handle stack differences in node 15 b7b01ec
  • [Deps] update is-regex, object-inspect, string.prototype.trim e344080
  • [New] Include name of test in log when test times out (#524) 78b4d98
  • [Dev Deps] update eslint 6d5e4ad
  • [Refactor] Avoid setting message property on primitives; use strict mode to catch this 9dfb680
  • [Deps] update is-regex a7ca7a3
  • Merge tag 'v4.14.0' 1f1a4a7
  • [meta] add safe-publish-latest; use prepublishOnly script for npm 7+ c3d434d
  • [meta] ensure not-in-publish‘s absence does not fail anything 2a0619d
  • [readme] remove long-dead testling-ci badge 1461611
  • [Tests] ensure bin/tape is linted faa51b5
  • [Dev Deps] update eslint fad6165
  • [Dev Deps] update eslint 79a0f4b
  • [meta] add missing safe-publish-latest dep d0a3888
  • [Tests] exclude examples from coverage 283f537

v5.3.0 - 2021-07-26

Commits

  • [eslint] fully enable @ljharb eslint config 9d3c5b4
  • [New] Use import() on esm files in supported node versions 28d6e51
  • [eslint] fully enable @ljharb eslint config ae8b5c0
  • [eslint] enable no-shadow f0756f3
  • [eslint] enable curly, object-curly-spacing, object-curly-newline e9b75e1
  • [Tests] uncaught exceptions and unhandled rejections importing files with bin/tape e6d2faf
  • [eslint] enable function-paren-newline, function-call-argument-newline ae6de0c
  • [actions] use node/install instead of node/run; use codecov action 5a6de66
  • [eslint] enable wrap-regex 7dcbd76
  • [Refactor] add names to Test.prototype functions 077a108
  • [eslint] enable comma-spacing 4acf1f2
  • [eslint] update no-redeclare b03d4c8
  • [eslint] enable brace-style 06eba07
  • [eslint] enable no-unused-vars 2ebd23a
  • [eslint] enable consistent-return fb4e3cf
  • [Refactor] avoid reassigning arguments 8a0ab53
  • [eslint] enable semi-style 5f8afc9
  • [readme] Another way to create custom reporters a68277c
  • [eslint] enable no-extra-parens a08dc34
  • [eslint] enable no-multi-spaces, no-multiple-empty-lines, space-in-parens be1eb21
  • [Refactor] bin/tape: separate "preparing of files list" from "require files list" 021fa6d
  • [Refactor] remove unused line, unneeded var initialization; add missing new da45ae6
  • [eslint] enable no-lonely-if 771f3dd
  • [eslint] enable space-infix-ops 233ffc6
  • [Refactor] remove use of legacy exports c332d62
  • [eslint] enable wrap-iife 428636c
  • [Docs] correct docs for t.teardown c4a4992
  • [readme] remove travis badge; add actions and codecov badges 900f823
  • [eslint] enable no-extra-semi 1af8f52
  • [Deps] update glob, is-regex, object-inspect e211546
  • [eslint] enable no-regex-spaces ef0069a
  • [Dev Deps] update aud, eslint 00a98d3
  • [Deps] update object-inspect 9bbf270
  • [Dev Deps] update eslint 57b659f
  • [Dev Deps] update eslint e628b23
  • [meta] ensure not-in-publish‘s absence does not fail anything fb3a243
  • [Deps] update object-inspect 771c8c4
  • [meta] add safe-publish-latest; use prepublishOnly script for npm 7+ 379115d
  • [Tests] exclude examples from coverage 75decb3

v5.2.2 - 2021-03-03

Commits

  • [Fix] proper exit behavior in node v0.6 3f94e68

v5.2.1 - 2021-02-27

Fixed

  • [Fix] t.teardown(): ensure callback is only called once #551

Commits

  • [Deps] update object-is, string.prototype.trim b497ead

v5.2.0 - 2021-02-20

Fixed

  • [New] add .teardown() on t instances #531
  • [readme] improve t.throws/t.doesNotThrow documentation #540

Commits

  • [readme] improve t.throws documentation 94220ba
  • [Tests] exclude node v0.6, for now 3c05a87
  • [Deps] update is-regex, resolve 8c52d12
  • [Dev Deps] update eslint, aud f847c85
  • [Deps] update call-bind ce0b1ad
  • [Dev Deps] update eslint 83f1eec

v5.1.1 - 2021-01-04

Commits

  • [Tests] make stripFullStack output an array of lines, for better failure messages 0743333
  • [Tests] migrate tests to Github Actions 266bc66
  • [Fix] preserve stack traces for returned Promises (async/await) d505cdf
  • [readme] Document unexpected t.end() behavior b505c4c
  • [Tests] add timeoutAfter test with Promises e8255cf
  • [readme] improve method docs df5a124
  • [Robustness] cache and call-bind more prototype methods 8e60dcb
  • [Tests] add npm run test:example to test non-failing examples. 4210e44
  • [eslint] fix some inconsistencies 7ca56eb
  • [eslint] ensure no trailing commas 04da90b
  • [meta] add Automatic Rebase and Require Allow Edits workflows 6d72960
  • [Tests] run nyc on all tests 5ec21aa
  • [Refactor] use call-bind/callBound instead of function-bind directly b19da31
  • [meta] do not publish github action workflow files 82c3904
  • [Tests] skip Promise tests when Promises are not available 688256a
  • [meta] run aud in posttest b9bec0e
  • [readme] Added tabe into reporter list 7aff9e4

v5.1.0 - 2020-12-29

Fixed

  • [readme] add tape-describe to 'other' section #522

Commits

  • [Tests] add test case for #519 for test.comment() in createStream/objectMode context 40ec79a
  • [Deps] update deep-equal, object-inspect, object-is, object.assign, resolve, string.prototype.trim 434f615
  • [Deps] update deep-equal, is-regex, object-inspect, object-is, object.assign, string.prototype.trim df23eda
  • [eslint] remove useless regex escapes 3554d4b
  • [readme] document Promise support; remove Promise-related alternatives 4665d63
  • [Tests] handle stack differences in node 15 1ac9ecf
  • [New] Include name of test in log when test times out e142c29
  • [Dev Deps] update eslint, js-yaml 7574152
  • [Dev Deps] update eslint c6772d1
  • [Dev Deps] update eslint 5b7720a
  • [Deps] update resolve 898302b

v5.0.1 - 2020-05-24

Merged

  • [Fix] createStream: result payload is not always an object #519
  • [Fix] Update RegExp for matching stack frames to handle Promise/then scenario #516
  • [Tests] Fix simple typo, placehodler -> placeholder #500

Fixed

  • [Fix] createStream: result payload is not always an object #519
  • [Fix] createStream: result payload is not always an object (#519) #519
  • [Fix] Update RegExp for matching stack frames to handle Promise/then scenario (#516) #515
  • [Fix] Update RegExp for matching stack frames to handle Promise/then scenario #515

Commits

  • Merge tag 'v4.13.3' b7af113
  • [Dev Deps] update eslint, falafel, js-yaml 9676a21
  • [Deps] update minimist, resolve 8887189
  • [Dev Deps] update eslint c421eb3
  • [readme] add tape-repeater (#511) 33712e2
  • [readme] add tape-repeater 0b5804d
  • [examples] add ecstatic 9b87675
  • [readme] Add link to tape-player (in-process reporter) (#496) bc1334b
  • [Docs] add an optional emoji version for tap-spec consumer (#501) 6326dc6

v5.0.0 - 2020-04-24

Commits

  • [Deps] update deep-equal, minimist, object-is, resolve 6fd0691
  • [Breaking] remove full "lib" export; replace with explicit exports 3bb97f1
  • [Dev Deps] update falafel f24491d
  • [Tests] Fix simple typo, placehodler -> placeholder 8ba3668
  • [examples] add ecstatic d021e9d
  • [readme] Add link to tape-player (in-process reporter) 5b9c442
  • [Docs] add an optional emoji version for tap-spec consumer f5d0899

v5.0.0-next.5 - 2020-03-02

Merged

  • [patch] Print name of test that didnt end #498

Fixed

Commits

  • [Tests] add tests for edge cases and numerics 4526b39
  • [Breaking] make equality functions consistent: 24240e2
  • [Tests] sync new test cases from master 98b2695
  • [eslint] enable quotes rule d686aa2
  • [eslint] enable quotes rule 1ab6bdb
  • [Refactor] remove unused code e6b6f11
  • [Deps] update resolve 398503c
  • [Deps] update resolve 15ea7d1

v5.0.0-next.4 - 2020-01-18

Fixed

  • [Fix] match/doesNotMatch: when passing, ensure the proper default assert message shows up #494
  • [Fix] match/doesNotMatch: when passing, ensure the proper default assert message shows up #494

Commits

  • [Refactor] remove unused code cf8dccc
  • [Deps] update resolve b30b6f1
  • [Fix] .catch is a syntax error in older browsers 6df4dfc
  • Merge tag 'v4.13.1' 925bf01

v5.0.0-next.3 - 2020-01-08

Commits

  • [Fix] tests without a callback that are skipped should not fail 82e316b

v5.0.0-next.2 - 2020-01-07

Commits

  • Merge tag 'v4.13.0' bf07cf8
  • [New] add t.match() and t.doesNotMatch(), new in node v13.6 0330d82
  • [New] add t.match() and t.doesNotMatch(), new in node v13.6 36a30eb
  • [New] tape binary: Add -i flag to ignore files from gitignore (#492) e0e2542
  • [New] tape binary: Add -i flag to ignore files from gitignore a0f9350
  • [lint] fix object key spacing d7c2fd3
  • [Tests] handle stack trace variation in node <= 0.8 21ac403
  • [Deps] update resolve 0f15085
  • [readme] remove long-dead testling-ci badge 08fae38

v5.0.0-next.1 - 2020-01-01

Fixed

  • [Breaking] fail any assertion after .end() is called #264
  • [Breaking] equality functions: throw when < 2 arguments are provided #442
  • [Breaking] use default require.extensions collection instead of the magic Array ['.js'] #137

Commits

  • [Breaking] throws: bring into line with node’s assert.throws 547dc14
  • [Refactor] make everything strict mode 11b7d85
  • [lint] fix object key spacing 85a8a7f
  • [Tests] Fail a test if its callback returns a promise that rejects ad75f86
  • [Fix] error stack file path can contain parens/spaces 9094271
  • [Breaking] tests with no callback are failed TODO tests 03529a9
  • [eslint] fix remaining undeclared variables 1a59e0b
  • [Tests] improve some failure output by adding messages bd76254
  • [Tests] handle stack trace variation in node <= 0.8 bffb60c
  • [Breaking] add "exports" to restrict public API 0e713a2
  • [Refactor] generalize error message from calling .end more than once 8e8af01
  • [Tests] ensure bin/tape is linted b5b40ae
  • [eslint] Fix leaking variable in tests 07e13a8
  • [Refactor] Avoid setting message property on primitives; use strict mode to catch this 0715294
  • Merge tag 'v4.12.1' a11e272
  • [Deps] update resolve b765bba
  • [Dev Deps] update eslint 949781f

v5.0.0-next.0 - 2019-12-20

Commits

  • [Breaking] if a test callback returns a rejected thenable, fail the test. f248610
  • [Breaking] error should not emit expected/actual diags f6dc34e
  • [Deps] update resolve dff5f1f
  • [Breaking] support passing in an async function for the test callback 5f88895
  • [Breaking] support exceptions in async functions 8d3f03a
  • [Tests] update tests for more async/await cases 197019c
  • [meta] change dep semver prefix from ~ to ^ c3924d3
  • [Breaking] update deep-equal to v2 898a6e7

v4.17.0 - 2023-09-21

Commits

  • [New] add t.intercept() e60aeca
  • [New] add t.capture and t.captureFn, modeled after tap 3d96d69
  • [Deps] switch from through and resumer to @ljharb/through and @ljharb/resumer a8a7d67
  • [Tests] simplify tests 83bc381
  • [Performance] use inline typeof c45db4e
  • [Deps] update minimist, resolve, string.prototype.trim feee094
  • [Dev Deps] update @ljharb/eslint-config, array.prototype.flatmap, aud 7123111
  • Revert "[meta] ensure not-in-publish‘s absence does not fail anything" 92aaa51
  • [Dev Deps] pin jackspeak since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 a576f8d

v4.16.2 - 2023-01-15

Commits

  • [Fix] throws: avoid crashing on a nonconfigurable or nonextensible expected 0731b5f
  • [actions] update rebase action 834453c
  • [Deps] update defined, minimist, object-inspect, string.prototype.trim 01edce8
  • [Dev Deps] update @ljharb/eslint-config, array.prototype.flatmap, aud 1b3ad24
  • [meta] add missing npmrc config 15e2175

v4.16.1 - 2022-09-19

Commits

  • [eslint] fix indentation b035590
  • [meta] add auto-changelog b467b85
  • [eslint] enforce no-use-before-define 87deb68
  • [eslint] clean up config a bit 3171edd
  • [Tests] stackTrace: use the common getDiag utility 65df5a4
  • [meta] fix repo URLs 85d86a4
  • Revert "[Tests] handle a broken error cause in node 16.9/16.10" 775ba37
  • [meta] use npmignore to autogenerate an npmignore file 1645abb
  • [eslint] enable func-style 75c0c3a
  • [readme] fix version badge 20ea48d

v4.16.0 - 2022-08-16

Commits

  • [New] bin/tape: include the exact arg when there are no glob results; use require on --require files 6a1ce43
  • [meta] create FUNDING.yml 5b4752f
  • [Refactor] bin/tape: make it a bit more functional, for easier v5 backporting fbdbfc9
  • [Deps] update glob, object-inspect, resolve, string.prototype.trim 6a3c200
  • [Dev Deps] update @ljharb/eslint-config, array.prototype.flatmap, es-value-fixtures, falafel 934d49b
  • [Tests] fix no_only tests on Windows f35f71b
  • [Robustness] test observably looks up exec on the object 4575ca4
  • [meta] add SECURITY.md 7b0c901

v4.15.1 - 2022-04-08

Commits

  • [Tests] handle a broken error cause in node 16.9/16.10 53d9e18
  • [Robustness] test observably looks up exec on the object 9dbe9ad
  • [meta] remove unused travis.yml file 5a52443
  • [meta] ensure prelint works on windows 48896e8
  • [Dev Deps] update eslint, @ljharb/eslint-config 3960ccf
  • [meta] improve prelint script when no .git dir is present 7c6dbbd
  • [Deps] update minimist 64677e0

v4.15.0 - 2022-01-26

Merged

  • [New] add --no-only flag/NODE_TAPE_NO_ONLY_TEST #572

Commits

  • [New] t.match/t.doesNotMatch: fail the test instead of throw on wrong input types. [a1c266b`](https://github.com/tape-testing/tape/commit/a1c266bf9577420702e1067c40a4a65677add63a)
  • [actions] reuse common workflows d3b4f46
  • [readme] port changes from v5 87f9b29
  • [Dev Deps] update eslint, @ljharb/eslint-config, aud 51ae645
  • [Fix] bin/tape: delay requires until needed b803fd8
  • [readme] hard wraps bad, soft wraps good 82af5ed
  • [Dev Deps] update eslint, @ljharb/eslint-config, safe-publish-latest, array.prototype.flatmap 3287a68
  • [actions] update codecov uploader 8d6aa6c
  • [Tests] handle carriage returns in stack traces on Windows f79acdf
  • [Deps] update glob, is-regex, string.prototype.trim 470ca1c
  • [meta] better eccheck command fe6978d
  • [Deps] update object-inspect, resolve 50ea080
  • [meta] Exclude fs from browser bundles (#565) 418dc94
  • [Tests] handle a broken error cause in node 16.9/16.10 ca1b906
  • [meta] fix prelint so it does not fail outside of a git repo a09133e
  • [Robustness] use cached .test 86ec0b2

v4.14.0 - 2021-07-27

Merged

  • [New] add .teardown() on t instances #546
  • [readme] add tape-describe to 'other' section #523

Fixed

  • [New] add .teardown() on t instances (#546) #531
  • [readme] add tape-describe to 'other' section (#523) #522

Commits

  • [Tests] make stripFullStack output an array of lines, for better failure messages f299759
  • [eslint] fully enable @ljharb eslint config 836610d
  • [actions] use node/install instead of node/run; use codecov action 46aff81
  • [readme] improve t.throws documentation b36f816
  • [Refactor] avoid reassigning arguments 5c4052f
  • [Tests] add test case for #519 for test.comment() in createStream/objectMode context 1700642
  • [Refactor] use call-bind/callBound instead of function-bind directly 967b73f
  • [readme] Another way to create custom reporters d81f9f6
  • [meta] do not publish github action workflow files 6bb3496
  • [Refactor] remove unused line, unneeded var initialization; add missing new da0cdf1
  • [Refactor] remove use of legacy exports a04439c
  • [Deps] update glob, is-regex, object-inspect, resolve, string.prototype.trim 6e71e6e
  • [eslint] remove useless regex escapes 1515ff4
  • [readme] remove travis badge; add actions and codecov badges 57a7cc9
  • [meta] run aud in posttest 3907aa5
  • [Refactor] generalize error message from calling .end more than once da8ca46
  • [Tests] handle stack differences in node 15 b7b01ec
  • [Deps] update is-regex, object-inspect, string.prototype.trim e344080
  • [New] Include name of test in log when test times out (#524) 78b4d98
  • [Refactor] Avoid setting message property on primitives; use strict mode to catch this 9dfb680
  • [meta] add safe-publish-latest; use prepublishOnly script for npm 7+ c3d434d
  • [meta] ensure not-in-publish‘s absence does not fail anything 2a0619d
  • [readme] remove long-dead testling-ci badge 1461611
  • [Tests] ensure bin/tape is linted faa51b5
  • [Dev Deps] update eslint fad6165
  • [Dev Deps] update eslint 79a0f4b
  • [Tests] exclude examples from coverage 283f537

v4.13.3 - 2020-05-24

Merged

  • [Fix] createStream: result payload is not always an object #519
  • [Fix] Update RegExp for matching stack frames to handle Promise/then scenario #516
  • [Tests] Fix simple typo, placehodler -> placeholder #500

Fixed

  • [Fix] createStream: result payload is not always an object (#519) #519
  • [Fix] Update RegExp for matching stack frames to handle Promise/then scenario (#516) #515

Commits

  • [Dev Deps] update eslint, falafel, js-yaml 9676a21
  • [Deps] update minimist, resolve 8887189
  • [readme] add tape-repeater (#511) 33712e2
  • [examples] add ecstatic 9b87675
  • [readme] Add link to tape-player (in-process reporter) (#496) bc1334b
  • [Docs] add an optional emoji version for tap-spec consumer (#501) 6326dc6

v4.13.2 - 2020-03-02

Merged

  • [patch] Print name of test that didnt end #498

Commits

  • [Tests] add tests for edge cases and numerics 4526b39
  • [Tests] sync new test cases from master 98b2695
  • [eslint] enable quotes rule d686aa2
  • [Refactor] remove unused code e6b6f11
  • [Deps] update resolve 398503c

v4.13.1 - 2020-01-09

Fixed

  • [Fix] match/doesNotMatch: when passing, ensure the proper default assert message shows up #494

v4.13.0 - 2020-01-07

Commits

  • [New] add t.match() and t.doesNotMatch(), new in node v13.6 0330d82
  • [New] tape binary: Add -i flag to ignore files from gitignore (#492) e0e2542
  • [lint] fix object key spacing d7c2fd3
  • [Tests] handle stack trace variation in node <= 0.8 21ac403
  • [Deps] update resolve 0f15085

v4.12.1 - 2019-12-24

Commits

  • [Fix] error stack file path can contain parens/spaces 9094271
  • [Deps] update resolve b765bba
  • [Dev Deps] update eslint 949781f

v4.12.0 - 2019-12-16

Fixed

  • [New] when the error type is wrong, show the message and stack #479

Commits

  • [Tests] use shared travis-ci configs f3a5925
  • [Tests] add a test for the wrong kind of error 44cbbf5
  • [Deps] update deep-equal, glob, object-inspect, resolve, string.prototype.trim 6e94800
  • [Deps] update is-regex, string.prototype.trim 3e0a341
  • [Refactor] use is-regex instead of instanceof RegExp 8150c3b
  • [Dev Deps] update eslint ba7e2b2
  • add tap-nyc to pretty-reporters 24487cb

v4.11.0 - 2019-06-28

Commits

  • [lint] enforce consistent semicolon usage a5006ce
  • [New] Add descriptive messages for skipped asserts 838d995
  • [Fix] emit skipped tests as objects 8d5dc2f
  • [Tests] add tests for 'todo' exit codes c6c4ace
  • [meta] clean up license so github can detect it 861cf55
  • [Refactor] use !! over Boolean() 32b5948
  • [Deps] update inherits, resolve 9526c2e

v4.10.2 - 2019-05-25

Fixed

  • [Refactor] Removed never-read inErrorState from index.js #461

Commits

  • [fix] don't consider 'ok' of todo tests in exit code 15b2dfc
  • Minor punctuation/highlighting improvement 25b4a24
  • [Dev Deps] update eslint, js-yaml 9ec3a0f
  • [Deps] update glob, resolve c30e492
  • [meta] set save-prefix to ~ (meant for runtime deps) 3f337d1

v4.10.1 - 2019-02-13

Fixed

  • Partial revert of #403: fbe4b951cb6c6cc4f0e9e3ae4a57b123dd82c0fb and 367b010d21c7c9814c4bc6b21d1c2a9a67596c11 #459

Commits

v4.10.0 - 2019-02-09

Merged

  • [Fix] Ensure that non-functions passed to throws fail the test, just like assert #268
  • [Fix] Ensure that non-functions passed to throws fail the test, just like assert #268
  • [Fix] Ensure that non-functions passed to throws fail the test, just like assert #268
  • Fix premature end of tests (and running sibling tests) when test includes subtests #403
  • [Fix]: only use one test runner for results, even if multiple streams are created #404

Fixed

  • Merge pull request #403 from nhamer/issue222 #222
  • Merge pull request #404 from nhamer/issue105 #105
  • [Test]: only use one test runner for results, even if multiple streams are created #105
  • [Fix] Fix premature end of tests (and running sibling tests) when test includes subtests #222
  • Comments should not make exit code incorrect. Fixes #92 #92

Commits

  • Merge all orphaned tags: 'v1.1.2', 'v2.0.2', 'v2.1.1', 'v2.2.2', 'v2.3.3', 'v2.4.3', 'v2.5.1', 'v2.6.1', 'v2.7.3', 'v2.8.1', 'v2.9.1', 'v2.10.3', 'v2.11.1', 'v2.13.4', 'v2.14.0', 'v2.14.1', 'v3.6.1' 6209882
  • [New] Implements TAP TODO directive 5cdaf54
  • Minor test tweaks due to output differences in v1 vs v4. d22b5fc
  • Minor test tweaks due to whitespace differences in v3 vs v4. 7ed6651
  • [Refactor] Avoid adding a new observable method to the API. fbe4b95
  • Minor test tweaks due to whitespace differences in v2 vs v4. 6ce09d9
  • [Tests] missing t.end(); avoid shadowing 144a361
  • [Fix] Stop createStream for creating additional test runner loops b494b18
  • hats, has module 6ecc842
  • [Dev Deps] update eslint, js-yaml 9e3d25e
  • [Fix] windows: Show failure location even if driver letter is lowercase fb548b3
  • Add missing concat-stream devDep 8b3c1b7
  • [New] add alias 'notDeepEquals' to 'notDeepEqual' function 35844e6
  • [Deps] update glob 82e7b26
  • [Docs] Add tape-promise into 'other' d15bc4b
  • [Docs] Add an alternative ES6 tape runner aac3e70
  • better travis yml 066542a
  • do not set canEmitExit with browserify process shim a28db7e
  • do not set canEmitExit with browserify process shim ebdbba6
  • do not set canEmitExit with browserify process shim 4f33ae5
  • do not set canEmitExit with browserify process shim 0e47a93
  • do not set canEmitExit with browserify process shim ff3e84f
  • do not set canEmitExit with browserify process shim 7164a03
  • do not set canEmitExit with browserify process shim 40cf488
  • do not set canEmitExit with browserify process shim d282191
  • do not set canEmitExit with browserify process shim 59fd1dc
  • do not set canEmitExit with browserify process shim 87eb6bc
  • do not set canEmitExit with browserify process shim c9d502e
  • do not set canEmitExit with browserify process shim 66c0a7d
  • gitignore node_modules 71af8ba
  • gitignore node_modules 3495543
  • [Docs] link to mixed tape 8a7567a
  • [Docs] Add electron-tap 5c36aa8
  • [Docs] Mention flip-tape in the section "other". 1693c34

v4.9.2 - 2018-12-29

Merged

  • [Docs] Clarify doesNotThrow parameters #450
  • Update README: convert list of tap reporters to links #439

Fixed

  • [Fix] notEqual and notDeepEqual show "expected" value on failure #453

Commits

  • Convert list of tap reporters to links 4337f58
  • [Docs] Updated readme to make test, test.only and test.skip consistent. 75c467e
  • [Dev Deps] update eslint, eclint 4b9c951
  • Clarify doesNotThrow parameters f53e3f1
  • [readme] Change broken image to use web archive b1df632
  • [Docs] cleanup from #439 5f1c5a2
  • Adding tap-junit 96de340

v4.9.1 - 2018-06-07

Merged

  • [docs] Add tap-react-browser #433

Commits

  • [Tests] add eclint and eslint, to enforce a consistent style c6f5313
  • [fix] Fix bug in functionName regex during stack parsing ec4a71d
  • [Dev Deps] use ~ for dev deps; update to latest nonbreaking 9d501ff
  • [Deps] update has, for-each, resolve, object-inspect 8a2d29b
  • Add tap-react-browser 6cbc53e
  • [Dev Deps] update js-yaml 73232c0
  • [Dev Deps] update concat-stream 45788a5
  • Fix spelling of "parameterize" 24e0a8d

v4.9.0 - 2018-02-18

Merged

  • [New] use process.env.NODE_TAPE_OBJECT_PRINT_DEPTH for the default object print depth #420
  • Add "onFailure" listener to test harness. #408
  • normalize path separators in stripFullStack #402
  • Check added stack trace parts for filename match #387
  • Fix dirname in stack traces #388
  • Use local reference for clearTimeout global #385

Fixed

  • [Fix] fix stack where actual is falsy #399

Commits

  • Handle spaces in path name for setting file, line no bf5a750
  • Update tests to correctly reference (or ignore) at prop d165142
  • Test for anonymous function wrapper 6015599
  • Test name with spaces 3c2087a
  • Add "onFinish" listener to test harness. 00aa133
  • [New] use process.env.NODE_TAPE_OBJECT_PRINT_DEPTH for the default object print depth. 17276d7
  • Handle stack variation in Node v0.8 a5fb7ed
  • [Tests] on node v9; use nvm install-latest-npm 4919e40
  • Update existing tests to properly reference anonymous names f619f60
  • Provide placeholder names for anonymous functions 32faf70
  • [Deps] update object-inspect, resolve 6867840
  • Reverse engineer error for at prop too 1eba217
  • normalize path separators in stacks f90e487
  • [Dev Deps] update js-yaml 0e68b2d
  • [Deps] update function-bind b66f8f8
  • Use lib directory instead of package root for stacktrace checking b6f5aaf
  • correct spelling mistake fde8216

v4.8.0 - 2017-07-31

Commits

  • [Deps] update resolve, object-inspect b50084c
  • [Dev Deps] update js-yaml c82c593
  • updates README.md and adds tap-html bd6db7b

v4.7.0 - 2017-06-26

Merged

  • Fix spurious "test exited without ending" #374

Fixed

  • [Fix] fix spurious "test exited without ending" #223

Commits

  • [New] show full error stack on failure 9302682
  • [Cleanup] elses need cuddles 995ddb2
  • [Tests] fix thrower stack in node 0.8 8b3a77e
  • [Tests] fix stack differences on node 0.8 c7859a2
  • [Tests] on node v8; no need for sudo; v0.8 passes now; allow v5/v7/iojs to fail. e030260
  • Only apps should have lock files. df48bfa
  • [Tests] npm v4.6+ breaks on node < v1 35e47e1
  • [Refactor] instead of throwing on undefined.forEach, throw explicitly. b06f914
  • [Deps] update glob, resolve 1a8e936
  • [Dev Deps] update falafel, js-yaml 7eb9e36
  • [Dev Deps] update concat-stream, js-yaml e6d4625
  • [Tests] npm v5+ breaks on node < v4 4375661
  • [Deps] update object-inspect dc1ffa5
  • [Deps] update resolve 66519cb
  • tap-min moved to derhuerst/tap-min bdf2b04
  • [Dev Deps] update tap 5ec88e7

v4.6.3 - 2016-11-21

Commits

  • [Tests] on node v7 a4cc2fe
  • [Fix] don’t assume Array#forEach, for ES3. cc9cc30
  • [Dev Deps] update js-yaml, tap-parser a80e655
  • [Deps] update glob 9b27d19

v4.6.2 - 2016-09-30

Fixed

  • [Fix] if someone throws null/undefined, it shouldn’t crash #324

v4.6.1 - 2016-09-29

Merged

  • Fix for not showing path for error messages on windows #316
  • [Tests] [Dev Deps] Update to latest version of devDependencies tap (v7) and tap-parser (v2) #318
  • [Fix] .only should not run multiple tests with the same name. #303

Fixed

  • [Fix] throws: only reassign “message” when it is not already non-enumerable. #320
  • update devDpendencies to latest: tap (v7) and tap-parser (v2) fixes #312 #312
  • update tap & tap-parser to latest versions fixes #312 (update devDependencies) #312
  • Merge pull request #303 from jtlapp/ref-based-only #299

Commits

  • update test/exit.js to use concat-stream instead of tap.createConsumer (method unvailable in tap v7) for #312 78e4ffd
  • update test/require.js to use concat-stream instead of tap.createConsumer (method method unavailable in tap v7) see: https://github.com/substack/tape/issues/312#issuecomment-242740448 8826099
  • update test/end-as-callback.js to use concat-stream instead of tap.createCosumer (method unavailable in tap v7) for #312 be10880
  • udpate test/nested.js to use concat-stream instead of tap.createConsumer (method unavailable in tap v7) #312 1211a3a
  • update test/too_many.js to use concat-stream instead of tap.createConsumer (method unavailable in tap v7) see: https://github.com/substack/tape/issues/312#issuecomment-242740448 5f89509
  • update test/fail.js to use concat-stream instead of tap.createConsumer (method unavailable in tap v7) see #312 b9ab50e
  • update test/array.js to use concat-stream instead of tap.createConsumer() (no longer available in tap v7) 00e595a
  • update test/nested-sync-noplan-noend.js to use concat-stream instead of tap.createConsumer (method unavailable in tap v7) for #312 45ae6c1
  • update test/default-messages.js to use concat-stream instead of tap.createConsumer() (no longer available in tap v7) #312 eb30f50
  • update test/timeoutAfter.js to use concat-stream instead of tap.createConsumer (method unavailable in tap v7) see: https://github.com/substack/tape/issues/312#issuecomment-242740448 db3a45e
  • update test/only.js to use concat-stream instead of tap.createConsumer (method unavailable in tap v7) for #312 c1807c2
  • .only now identifies tests by reference instead of by test name, fixing #299 289b590
  • Separate tap extensions by category 6978df4
  • In docs, clarified when 'msg' describes the assertion. Also clarified 'expected' in throws(). e532790
  • remove redundant tests from test/skip.js - still testing the documented API adequately aa021eb
  • remove redundant tests in test/throws.js (assertion unchanged! tests pass) for #312 fd7eb30
  • Fix for unit tests on windows baca83c
  • update test/max_listeners.js to use path.join for cross-platform compatibility see: https://github.com/substack/tape/pull/314#discussion_r76651627 1bac623
  • [Dev Deps] update falafel, tap-parser 50f462e
  • [Dev Deps] update tap, tap-parser ea9dcb7
  • update test/double_end.js to use path.join for cross-platform compatibility see: https://github.com/substack/tape/pull/314#discussion_r76651627 e3115ff
  • [Deps] update glob 6369b77
  • [Tests] ensure the max_listeners test has passing output. 918e217
  • [Deps] update inherits 96552cf
  • [Dev Deps] update concat-stream 47507a0
  • [Deps] update glob 8608d59
  • Fix bug from #303 / 289b59005706dbedf572c9d209681656664c7bde 092344b
  • initialized _only to null 07da71b
  • [Dev Deps] update glob fb600ee
  • Added travis ci support for node 6 d5e1a5e

v4.6.0 - 2016-06-19

Fixed

  • [Robustness] be robust against the global setTimeout changing. #292
  • [Tests] add some tests with throws and RegExp matching. #269

Commits

  • [results] make object-inspect depth configurable for expected/actual a196915
  • add message defaults to .ok() and .notOk() 91b639c
  • Add test for deep loose equal. 5060034
  • [Deps] update glob, object-inspect 5492dee
  • [Dev Deps] update js-yaml 03bf9b6
  • [Deps] update glob 1f82954
  • Update readme.markdown 7ea6373
  • link build badge to master branch a2c0f2e
  • [Dev Deps] update js-yaml b194ab1

v4.5.1 - 2016-03-06

Merged

  • [Fix] Ensure that non-functions passed to throws fail the test, just like assert #268

Fixed

  • Ensure that non-functions passed to throws fail the test, just like assert #267

v4.5.0 - 2016-03-02

Merged

  • Test on Node.js v0.10.x, v0.12.x, v4.x, and v5.x #238
  • [Docs] Fix readme formatting #233

Fixed

  • [Tests] remove unnecessary + failing Error message assertion #255

Commits

  • [New] Skipped test blocks should output a “SKIP” message. 1414948
  • [Deps] update deep-equal, function-bind, glob, object-inspect, resolve, string.prototype.trim, through 13654ad
  • [Dev Deps] update concat-stream, falafel, js-yaml, tap-parser 9a6b655
  • doc: Explain opts in t.test 545db26
  • [Tests] building C extensions on iojs 3 and greater doesn’t work on a stock sudoless travis-ci VM. 40be685
  • Fix readme formatting 69dada1
  • Travis: Get rid of sudo 95848f4
  • Add back iojs 0f51449

v4.4.1 - 2015-12-30

Merged

  • Multiline comments #228
  • [Docs] Fix a typo in the README #229

Commits

  • Exploratory comments to ascertain current behavior cc3b58e
  • Failing test for new functionality 0132b1d
  • Added test case for Windows line endings c66f25e
  • Removed unnecessary cast 3a5417a
  • Fix a typo in the README b8e4002

v4.4.0 - 2015-12-25

Merged

  • Issue175 #212
  • Removed unreachable Results.prototype.only code #217

Fixed

  • rename tearDown to onFinish #175
  • add tape.tearDown handler #175

Commits

v4.3.0 - 2015-12-22

Merged

  • Add flag to require modules before running tests #224
  • Add few tap reporters #213
  • Add ES6 support link to documentation. #204

Commits

  • This implements -r and --require as command line options 7ae60f5
  • Add -r,--require documentation to README.md 096d2e7
  • Revert "Remove unneeded whitespaces in README" 35c6c08
  • Remove unneeded whitespaces in README 3ed9b91
  • Use regular ol' if instead of boolean operator in sanity check ffa503a
  • Make single require check more readable d0ca885
  • Unquote keys in object literals 9f02249
  • Use ~ for minimist and resolve dependency versions. 4f81dbc
  • Fix spelling mistake in comment 4077efe
  • Fix indent mistake 2e57f22
  • Revert "Added rudimentary source map support" 3f02033
  • Added rudimentary source map support 737aa42
  • Add "tap-diff" and "tap-notify" to README 77a2bbb

v4.2.2 - 2015-10-20

Merged

  • Move timeout option to run time, not load time #202

v4.2.1 - 2015-10-02

Merged

  • Travis: Add Node v4 #195
  • add tape-dom link to the readme #189

Commits

  • Use string.prototype.trim instead of relying on String#trim, for ES3. 77e1848
  • Bumping defined to v1.0.0 - no implementation change, just follows semver now. 0e407f0
  • Add Node v4 df62458

v4.2.0 - 2015-08-14

Commits

  • Use has instead of a homegrown version of the same. e82c1e8
  • Use function-bind to ensure we're robust against modification of Function#call 88d567c

v4.1.0 - 2015-08-12

Merged

  • improve yaml formating of diagnostic information #171
  • Expose the main test harness #170

Fixed

  • Expose the main harness's results object #148

Commits

  • improve yaml formatting of diagnostic information b73d2bf
  • Exposing the whole test harness fc889f5

v4.0.3 - 2015-08-06

Commits

  • Cache Object.prototype.hasOwnProperty here also. 3eda12c

v4.0.2 - 2015-08-03

Merged

  • Comments should not make exit code incorrect. Fixes #92 #168
  • Added --save-dev to install instruction #166

Fixed

  • Merge pull request #168 from grit96/issue-92 #92
  • Comments should not make exit code incorrect. Fixes #92 #92

v4.0.1 - 2015-07-19

Merged

  • Add info about bin usage to readme. #156
  • Clarify comment documentation #153

Commits

  • Cache Object#hasOwnProperty in case clients break it as part of tests f9a8088

v4.0.0 - 2015-04-03

Fixed

  • Expand reporters section into "things that go well with tape" #147
  • Update dependencies #93

Commits

v3.6.1 - 2016-03-06

Merged

  • [Fix] Ensure that non-functions passed to throws fail the test, just like assert #268

Commits

  • Minor test tweaks due to whitespace differences in v3 vs v4. 7ed6651

v3.6.0 - 2015-04-02

Merged

  • Only check for errors in callback if exist #149
  • Added tap-difflet to README #139
  • Fixed typo in README #146

Commits

  • fix test 7329ddc
  • Remove this extra test I mistakenly committed 4b1e452
  • Add documentation of test.comment 04bb03e
  • only ifError if we have an err value 4205104

v3.5.1 - 2015-02-05

Merged

  • add caught guard to avoid referencing undefined property #145

v3.5.0 - 2015-01-30

Merged

  • Detect inErrorState with code not equal to zero #138
  • Fixing backwards t.end explanation #142
  • adds note on t.end(arg) behavior #141

v3.4.0 - 2015-01-18

Merged

  • Add a Function.constructor check to throws. #130
  • remove unused require #131
  • Add section about uncaught exceptions to readme. #134

Commits

  • add t.throws(fn, Function) 13efd54

v3.3.0 - 2015-01-18

Merged

  • Improve at error detection #133
  • Add timeoutAfter method #132

Commits

v3.2.0 - 2015-01-15

v3.1.0 - 2015-01-15

Merged

  • Remove uncaught-exception listener #127
  • Adding tap-xunit to reporters. #123

Commits

  • Remove uncaught-exception. dd661b0
  • Add back to do not call exit() if error semantics. 9c60d32
  • Adding a tap-xunit to reporters. ca27f59

v3.0.3 - 2014-11-11

Commits

  • notLooseEquals should be !deepEqual 5121547

v3.0.2 - 2014-11-05

Merged

  • Change "a,b" into "actual,expected" #114

v3.0.1 - 2014-10-17

Commits

v3.0.0 - 2014-09-17

Merged

  • Document that expected must be a RegExp #101
  • Asynchronously declared nested tests w/ plan() w/o end() #98

Commits

v2.14.1 - 2016-03-06

Merged

  • [Fix] Ensure that non-functions passed to throws fail the test, just like assert #268

Commits

  • Minor test tweaks due to whitespace differences in v2 vs v4. 6ce09d9
  • gitignore node_modules 71af8ba

v2.14.0 - 2014-08-05

Commits

v2.13.4 - 2014-07-19

Fixed

  • Comments should not make exit code incorrect. Fixes #92 #92

v2.13.3 - 2014-06-12

Merged

  • Add a section about reports to the README #89

Commits

v2.13.2 - 2014-06-02

Commits

  • FIX: handling if (extra.parent) when parent == 0 9579246

v2.13.1 - 2014-05-17

Commits

v2.13.0 - 2014-05-15

Commits

  • Bind all test methods 1ca29e2
  • Test that we can call assertion functions directly f9774cc
  • Fix Test constructor so that it doesn't accidentally mutate global scope ba3bcbb
  • formatting aacd7a9

v2.12.3 - 2014-04-04

Commits

  • Remove dependency on util builtin d39b0eb

v2.12.2 - 2014-04-02

v2.12.1 - 2014-03-29

Commits

  • do not set canEmitExit with browserify process shim 0212262

v2.12.0 - 2014-03-23

Commits

  • switches are weird aae89ee
  • Moving the name/opts/cb code out into a reusable internal function. 88e296f
  • Adding Test.skip. f9aa185

v2.11.1 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim a28db7e

v2.11.0 - 2014-03-21

Commits

v2.10.3 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim ebdbba6

v2.10.2 - 2014-03-04

Commits

v2.10.1 - 2014-03-04

Commits

v2.10.0 - 2014-03-04

Commits

v2.9.1 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim 4f33ae5

v2.9.0 - 2014-03-04

Commits

  • complete double end test 45add17
  • omit expected and actual if there is no actual or expected b6ac9bf
  • failing test for calling .end() twice c0a9a29
  • guard against calling .end() twice 8d25028

v2.8.1 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim 0e47a93

v2.8.0 - 2014-03-04

Commits

  • remove .bind(), formatting 7092104

v2.7.3 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim ff3e84f

v2.7.2 - 2014-03-04

Commits

v2.7.1 - 2014-03-04

Commits

v2.7.0 - 2014-03-04

Merged

  • Clarify how to access the output stream #65

Fixed

  • Clarify how to access the output stream #63

Commits

  • using object-inspect for comparisons, passing the undef test 49963b3
  • failing undef test 9ee8421
  • update docs 984b21f

v2.6.1 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim 7164a03

v2.6.0 - 2014-03-03

Commits

  • documented custom reporters 7572828
  • objectMode for stream output 26c05e3
  • .createStream() for tap output on the default harness 5d2cd63
  • stream example 47848f2
  • only render the test events right before they begin 9da8dff

v2.5.1 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim 40cf488

v2.5.0 - 2014-02-20

Fixed

  • Fixes #55 - Callback optional. #55

Commits

  • No callback is equivalent to skipping. 9f7a2d0

v2.4.3 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim d282191

v2.4.2 - 2014-02-01

Commits

  • Reduce stack size. 3b05526
  • re-indent. Fuck whichever editor does this by default. 52f3541

v2.4.1 - 2014-01-31

Commits

  • should throw --> should not throw for the doesNotThrow assertion 04f3751

v2.4.0 - 2014-01-29

Commits

  • remove the browser compat section since there is already a giant testling badge fe3fe96
  • upgrade deep-equal to 0.2.0 dcf6b46
  • drop require stream 97fede5

v2.3.3 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim 59fd1dc

v2.3.2 - 2013-12-17

Commits

  • fix to define the stream so it can emit errors 00af8ed

v2.3.1 - 2013-12-17

Commits

  • drop split and stream-combiner to make the default stream not drop newlines in ie<9 ea56255

v2.3.0 - 2013-11-22

Commits

  • suppress EPIPE but set the exit code to 1 so test results may be piped around to head/grep/tail 1589695

v2.2.2 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim 87eb6bc

v2.2.1 - 2013-11-22

Commits

v2.2.0 - 2013-11-22

Commits

  • is now properly noisy when more commits than expected were run 2954dac
  • rip out the old new Stream default stream to just use split, duplexer, and through 021da85
  • properly fixed the default stream 2ce40f5

v2.1.1 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim c9d502e

v2.1.0 - 2013-10-25

Commits

  • Refactor test-ordering logic 48964a6
  • Count subtests against the plan 978431c
  • Add nested-sync-noplan-noend 8449f1c
  • Add test for async asserts in subtests ref #42 9d64ad3
  • Add failing test for planning # of subtests bc03743
  • Remove comment block 2c06852
  • Revert "Add test for running children asynchronously" c39be29
  • Add test for running children asynchronously 709c36a
  • add test for asynchronously adding subtests 8b59a80
  • Add second @spion patch 35f29a8
  • Revert "Add patch from @spion to make nested-sync-noplan-noend pass" a43860b
  • Add patch from @spion to make nested-sync-noplan-noend pass 188fbb1
  • Remove 'next' event 78e48c9
  • Add checks against double-execution of child tests cfff35b

v2.0.2 - 2014-04-02

Commits

  • do not set canEmitExit with browserify process shim 66c0a7d

v2.0.1 - 2013-10-25

Commits

  • toStringified msg to prevent TypeError 37305c2

v2.0.0 - 2013-10-14

Commits

  • strict deep equal comparisons 95f827d
  • document strict/loose deep equals 785be99
  • failing deep strict equal test d56754a

v1.1.2 - 2016-03-06

Merged

  • [Fix] Ensure that non-functions passed to throws fail the test, just like assert #268

Commits

  • Minor test tweaks due to output differences in v1 vs v4. d22b5fc
  • Add missing concat-stream devDep 8b3c1b7
  • gitignore node_modules 3495543

v1.1.1 - 2013-09-20

Commits

v1.1.0 - 2013-09-03

Commits

  • test.only should not run any other test blocks 1f56566
  • failing test for t.only() firing tests unnecessarily bd3f198
  • fix typoes 8cf5c67

v1.0.4 - 2013-06-08

Commits

  • re-throw error to get it to show a51e872

v1.0.3 - 2013-06-07

Commits

  • do not call process.exit() on uncaught exception 3801e20

v1.0.2 - 2013-05-08

Commits

  • cant lazy load only. Has to be a property of the exported thing c5a4731
  • Add the only property back to the exported test function d22deba

v1.0.1 - 2013-05-03

Commits

v1.0.0 - 2013-05-03

Commits

  • took out lots of complexity, refactoring 827b59d
  • basic example finally works 2a59c49
  • removing harness test, not sure why it's broken on 0.8 bd9e9a6
  • nested test nearly works 7951747
  • refactor exit logic 890382d
  • fixed for the two example 0ac88b8
  • use a createStream() function instead of .stream 6417cdc
  • fix harness test fa706ae
  • no longer getting already closed errors by tracking the number of running tests c9def14
  • child ordering output is now correct 5544d26
  • only test passes 4fbabba
  • check for end and call ._exit() if unended ce0d62c
  • fixed the many test, broke the exit test 72e34ad
  • passing one more of the exit tests 5ec8f42
  • nested test at least finishes now 6252fd2
  • fix default harness going off unexpectedly b1c1d6a
  • special case for exiting, all tests pass now 88de699
  • passing the skip test 876930e
  • update the tests to use createStream 9420e07
  • check pause status before resuming 606b141
  • nested example completely works a5e709e
  • only the exported harness will be piped to the default stream 6df7fc0
  • exit test completely passes f37d431
  • fixed the nested test 4f05679
  • getting further into the child ordering test 8a80302
  • getting further into the child ordering test 365ceab
  • update the harness test for createStream 5329dc6
  • partial fix for v0.10 exiting early 78c7b77
  • partly fixed the test name ordering issue c4dc7ac

v0.3.3 - 2013-04-01

Commits

v0.3.2 - 2013-03-25

Commits

  • failing exit test for 2nd test() plans e7d00be
  • use a setInterval to keep the event loop alive c20c556
  • clean up the global harness exit interval 361ecb6
  • fix the second exit test asserts c85294a

v0.3.1 - 2013-03-21

Commits

  • use json-stringify-safe in render.js to not throw on circular structures 51a4e66
  • implemented decycle for JSON.stringify that should work in IE 178a8dc

v0.3.0 - 2013-03-11

Commits

v0.2.2 - 2013-01-18

Commits

v0.2.1 - 2013-01-18

Commits

v0.2.0 - 2013-01-17

Commits

v0.1.5 - 2012-12-20

Commits

  • failing max listeners test 4058f75
  • avoid max listeners warnings, test passes 2f8a822

v0.1.4 - 2012-12-20

Commits

v0.1.3 - 2012-12-19

Commits

  • fix the optional plan test on 0.6 af728e8
  • fix for the exit test on 0.6 17d0335

v0.1.2 - 2012-12-19

Commits

  • not enough example 9b2ffe1
  • only do console.log() mode, fix double \n bug 028e858

v0.1.1 - 2012-12-12

Fixed

  • Handle regexp in throws. Fixes #8 #8

v0.1.0 - 2012-12-03

Commits

  • failing exit test 104af1f
  • passing exit ok test 7de897c
  • too few assertion test 4ae9c04
  • feature-detect process.exit() and "exit" events, exit tests now passes 6fc71ba
  • failing throw test 3d58fef
  • throw test passes 37f79d2
  • better error messages with stack traces 1f1fcf7
  • update tests to thread through exit: false c8e11e1
  • clean up feature detection 329f784
  • 0.1.0 now with exit and exception handling ba72d57

v0.0.5 - 2012-11-28

Commits

v0.0.4 - 2012-11-26

Commits

v0.0.3 - 2012-11-25

Commits

  • using defined for defined-or (//) 6ce0e1a

v0.0.2 - 2012-11-25

Fixed

  • Handle children in order, and grandchildren #5 #6
  • Fix #3 Implement Test.comment #3

Commits

v0.0.1 - 2012-11-25

Fixed

  • Fix child ordering #4
  • Use conf object, support skipping entire tests #2
  • plan() should be optional #1

Commits

v0.0.0 - 2012-11-25

Commits

  • mostly compatible with node-tap assertions, stubbed out assertion-to-TAP logic 7948e2e
  • documentation, test.stream 7e1d1f0
  • fix double-piping bug in the output ddd2535
  • failing nested test 422bfb4
  • passing too many test e888fbb
  • passing fail test 5c2dfed
  • passing array test 7991377
  • package.json etc a5b83f2
  • nested failure example 1ea9057
  • basic tap output works 53ab0e8
  • nested tests work c9ca5be
  • plan errors 40aafce
  • expected, actual, and operator keys in yaml-esque format on assertion failures dab1314
  • send the end event properly 46fb0a1
  • trailing tap data 463afd2
  • remove nested test indents to pass the tests f6b844e
  • initial artistic direction da360eb
  • using travis 749e84f
  • document t.test() 77983ab
  • send the tap header 31dae7d