6522e4f524
Rather than use our own custom expect library, we can use expect from npm [1], which has an API almost identical to the one Puppeteer has, but with more options, better diffing, and is used by many in the community as it's the default assertions library that comes with Jest. It's also thoroughly documented [2]. [1]: https://www.npmjs.com/package/expect [2]: https://jestjs.io/docs/en/expect
62 lines
1.5 KiB
Markdown
62 lines
1.5 KiB
Markdown
# TestRunner
|
|
|
|
This test runner is used internally by Puppeteer to test Puppeteer itself.
|
|
|
|
- testrunner is a *library*: tests are `node.js` scripts
|
|
- parallel wrt IO operations
|
|
- supports async/await
|
|
- modular
|
|
- well-isolated state per execution thread
|
|
- uses the `expect` library from `npm` for assertions.
|
|
|
|
### Installation
|
|
|
|
```sh
|
|
npm install --save-dev @pptr/testrunner
|
|
```
|
|
|
|
### Example
|
|
|
|
Save the following as `test.js` and run using `node`:
|
|
|
|
```sh
|
|
node test.js
|
|
```
|
|
|
|
```js
|
|
const {TestRunner, Reporter} = require('@pptr/testrunner');
|
|
const expect = require('expect')
|
|
|
|
// Runner holds and runs all the tests
|
|
const runner = new TestRunner({
|
|
parallel: 2, // run 2 parallel threads
|
|
timeout: 1000, // setup timeout of 1 second per test
|
|
});
|
|
|
|
// Extract jasmine-like DSL into the global namespace
|
|
const {describe, xdescribe, fdescribe} = runner;
|
|
const {it, fit, xit} = runner;
|
|
const {beforeAll, beforeEach, afterAll, afterEach} = runner;
|
|
|
|
// Test hooks can be async.
|
|
beforeAll(async state => {
|
|
state.parallelIndex; // either 0 or 1 in this example, depending on the executing thread
|
|
state.foo = 'bar'; // set state for every test
|
|
});
|
|
|
|
describe('math', () => {
|
|
it('to be sane', async (state, test) => {
|
|
state.parallelIndex; // Very first test will always be ran by the 0's thread
|
|
state.foo; // this will be 'bar'
|
|
expect(2 + 2).toBe(4);
|
|
});
|
|
});
|
|
|
|
// Reporter subscribes to TestRunner events and displays information in terminal
|
|
const reporter = new Reporter(runner);
|
|
|
|
// Run all tests.
|
|
runner.run();
|
|
```
|
|
|