run-headless
The easiest way of running code in a modern headless browser environment.
Install
$ npm install --global run-headless
Usage
Usage: run-headless [options] rh [options] Options: --html Literal HTML to execute (default: minimal skeleton) --js Literal JavaScript to execute (default: stdin) --url URL to load (overrides --html) -c, --close-var Close global function (default: `__close__`) -o, --coverage-var Coverage global variable (default: `__coverage__`) -d, --out-dir Coverage output directory (default: `.nyc_output`) -f, --out-file Coverage output file (default: `<uuid>.json`) -h, --help Output usage information -v, --version Output version number
Examples
$ echo "console.log('hello world')" | run-headlesshello world $ run-headless --js "console.log('hello world')"hello world
$ cat index.js | run-headless$ rollup index.js | run-headless$ browserify index.js | run-headless$ nyc instrument index.js | run-headless && nyc report
$ run-headless --html "<script>console.log('hello world');</script>"$ run-headless --html "$(cat index.html)" --js "$(cat index.js)"
$ run-headless --url "http://localhost:3000/tests"$ run-headless --url "https://google.com" --js "console.log(document.title)"
CI
Headless browsers are well suited to running in CI environments. Configurations vary, but this .travis.yml
file should get you going with Travis:
sudo: requiredlanguage: node_jsaddons: chrome: stablenode_js: - node - '8'
Browser Testing
You can use any test runner you like that works in a browser and outputs to the console. Just make sure to run window.__close__()
(or your custom closeVar
) when all tests have completed.
// test.js const test = ; ; test;
$ browserify test.js | run-headless | tap-diff should pass ✔ yay! passed: 1 failed: 0 of 1 tests (763ms) All of 1 tests passed!
API
run(options): Runner
options
{Object}
See usage.html
{String}
js
{String}
closeVar
{String}
coverageVar
{String}
outDir
{String}
outFile
{String}
The following example starts up a static file server with express, bundles test scripts with rollup, executes them in a headless browser, and prints the output to the console. (Assumes that your rollup config is generating a bundle with nyc-compatible instrumented code).
// test.js const run = ;const express = ;const rollup = ; const server = express ;
$ nyc node test.js... test output ...... coverage output ...
Runner Methods
.then()
and .catch()
Runner
is a thenable and awaitable Promise object. It resolves when the browser is closed.
Runner Properties
.browser
{Browser}
A puppeteer Browser instance.
.page
{Page}
A puppeteer Page instance.
Contribute
Standards for this project, including tests, code coverage, and semantics are enforced with a build tool. Pull requests must include passing tests with 100% code coverage and no linting errors.
Test
$ npm test
Acknowledgements
MIT © Shannon Moeller