x-test
a simple, tap-compliant test runner for the browser
Spec
- importable as
type="module"
- is interoperable with TAP Version 13
- nested sub-tests run in an iframe
- has a recognizable testing interface
Interface
Testing
The following are exposed in the testing interface:
test
: Creates a sub-test in an iframe
based on given src
html page.it
: The smallest testing unit--asynchronous.skip
: An it
whose callback is not run and which will pass.todo
: An it
whose callback is run and is expected to fail.waitFor
: Ensures the test does not exit until given promise settles.assert
: Simple assertion call that expects a boolean.
Events
x-test-ping
: root responds ('x-test-pong', { status: 'started'|'ended' })x-test-ended
: all tests have completed or we bailed outx-test-bail
: [internal] signal to quit test earlyx-test-queue
: [internal] queues a new testx-test-next
: [internal] destroy current test and create a new onex-test-it-started
: [internal] user defined a new "it"x-test-it-ended
: [internal] user-defined "it" completed
Parameters
The following parameters can be passed in via a url search
:
x-test-no-reporter
: turns off custom reporting tool ui
Execution
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.
Usage with puppeteer
See test.js
for an example of how you can use puppeteer
to run your app's
tests and log the resulting TAP output to the console.
Parsing TAP
There are many TAP formatters. Importantly, as long as you can pipe the TAP
output to another program, the output should be interoperable.