The main process sets the AVA_PATH environment variable to the absolute
path of the index.js file. Workers are loaded with this variable
present. When test files require the AVA module (assuming it's a version
containing this commit of course), the index.js file redirects to the
one used by the worker if necessary by comparing AVA_PATH.
The redirect required most of index.js to be moved into a separate
module (lib/main.js).
Fixes#643.
We used to have a nice warning, telling people to use the CLI if they ran `node path/to/testfile.js`. It was broken by requiring `test-worker` to early. `test-worker` tries `JSON.parse(process.argv[2])`, which will likely throw. Preventing the helpful message.
This adds a fix, and a regression test.
clean-yaml-object is the error serialization tool used by node-tap.
It has some nice benefits over serailze-error including better stringification of functions and buffers.
More importantly, the shared code will help keep our tap output consistent with that of node-tap.
The child processes determine whether the test had an error based on its `error`
property not being `undefined`. However they then change this property to an
empty object if there was no error.
The API determines whether a test had an error based on its (empty) error object
having a `message` property. If a test did not have an error, its `error`
property is set to `null`. This prevents errors without messages from being
reported correctly.
Instead set `error` to `null` in the child processes and rely on that in the
API.
I've added a test to validate errors without messages get reported.
Ensures that skipped tests are also counted when determining whether or
not a file contains tests. My own use-case is a multi-file test suite
where one or more test files contain nothing but skipped tests due to
them testing functionality yet to be implemented.
There are two possible errors that can result in no test data being
received.
1. The user never imports `ava` in their test file.
2. The user has not written any tests in the file yet.
We treat both as errors, but were handling them differently.
Most problematic, one caused the promise to resolve, the other
caused the promise to reject.