UNPKG

@tapjs/node-serialize

Version:

Stream TAP test data as a serialized node:test stream

61 lines (45 loc) 2.09 kB
# @tapjs/node-serialize A default tap plugin that serializes the output of root `TAP` test for consumption by the `node --test` runner. That is, this is for running tests that you write like: ```js import t from 'tap' t.pass('this is fine') // etc ``` and then run with `node --test`. ## USAGE This plugin is installed with tap by default. If you had previously removed it, you can `tap plugin add @tapjs/node-serialize` to bring it back. When enabled, this plugin is activated when the `NODE_TEST_CONTEXT` environment variable is set to `child-v8`. When so activated, the root `TAP` test outputs a stream of `node:test` message objects (ie, the data emitted by Node's [`TestStream` class](https://nodejs.org/api/test.html#class-testsstream)) to standard output, instead of piping TAP data to standard output. It has no effect on other tests within the suite. To disable this behavior, run `tap plugin rm @tapjs/node-serialize`. ## Caveat about Timing Node-tap and node's built-in `node:test` are not quite identical in their approach. Specifically, they have very different approaches to asynchronous testing. When using `node:test`, all tests are placed in a queue, and de-queued and started by level. It is considered an error for a test to perform any asynchronous actions outside of the scope of its parent suite method. In tap, when `t.jobs` is set to some number greater than `1`, tests may run in any order, and their subtests may _also_ run in any order, at the same time as its siblings. While a subtest will never start before its parent, it may start _after_ its parent's sibling tests, making the apparent nesting get interleaved in a strictly event-stream based tracking. To handle this, this serializer creates a tree of subtests, and only emits the relevant `node:test` event messages all at once, in the correct order that `node --test` expects. The downside of this is that it may appear that tests hang and then emit all of their data at once. If true in-progress reporting is desired, then you're probably better off using tap's built-in test runner.