a simple, tap-compliant test runner for the browser
- importable as
type="module" - is interoperable with TAP Version 14
- nested sub-tests run in an iframe
- has a recognizable testing interface (
it,describe,assert) - can be used for automated testing
- can be used to assert coverage goals
The following are exposed in the testing interface:
test: Creates a sub-test in aniframebased on givensrchtml page.it: The smallest testing unit — can be asynchronous.it.skip: Anitwhose callback is not run and which will pass.it.only: Skip all otherittests.it.todo: Anitwhose callback is run and is expected to fail.describe: Simple grouping functionality.describe.skip: Skip allittests in this group.describe.only: Skip all otherdescribegroups andittests.describe.todo: Mark allittests within this group as todo.waitFor: Ensures test registration remains open until given promise settles.assert: Simple assertion call that throws if the boolean input is false-y.coverage: Sets a coverage goal for the given href.
Messages are posted to a BroadcastChannel channel with the name x-test.
x-test-client-ping: root responds (x-test-root-pong, { status: 'started'|'ended' waiting: true|false })x-test-root-pong: response tox-test-client-pingx-test-root-coverage-request: client should respond (x-test-coverage-result)x-test-client-coverage-result: response tox-test-root-coverage-requestx-test-root-end: all tests have completed or we bailed out- (internal)
x-test-root-run: all tests have completed or we bailed out - (internal)
x-test-suite-coverage: signal to test for coverage on a particular file - (internal)
x-test-suite-register: registers a new test / describe / it - (internal)
x-test-suite-ready: signal that test suite is done with registration - (internal)
x-test-suite-result: marks end of "it" test - (internal)
x-test-suite-bail: signal to quit test early
The following parameters can be passed in via query params on the url:
x-test-no-reporter: turns off custom reporting tool uix-test-run-coverage: turns on coverage reporting**x-test-name: filters tests by name using regex pattern matching
**See Command Line Usage.
Both test and it calls will execute in order**. test calls will boot the
given html page in an iframe. Such iframes are run one-at-a-time. All invoked
it calls await the completion of previously-invoked it calls.
**This is not the case if you nest it--but that's an anti-pattern anyhow.
You can filter tests by name using the x-test-name query parameter, which accepts a regex pattern. This allows you to run only specific tests that match the pattern.
http://localhost:8080/test/?x-test-name=should%20validate
For automated testing with a Node.js CLI, see the @netflix/x-test-cli package documentation.
There are many TAP formatters. Importantly, as long as you can pipe the TAP output to another program, the output should be interoperable.