meteortesting:browser-tests

v1.3.4Published last year

meteortesting:browser-tests

Formerly published as aldeed:browser-tests

This package exports a startBrowser function for server code, which runs your client tests within a headless browser page. Meteor test driver packages can depend on this package. See the example implementation here: https://github.com/DispatchMe/meteor-mocha

NOTE: This package replaces dispatch:phantomjs-tests. This package supports PhantomJS as well as others, and can be easily updated to support more.

Usage

In your test driver package package.js file, add

1api.use('meteortesting:browser-tests@0.0.1', 'server');

Then in your server code, do something similar to this:

1import { startBrowser } from 'meteor/meteortesting:browser-tests';
2
3function start() {
4  startBrowser({
5    stdout(data) {
6      console.log(data.toString());
7    },
8    stderr(data) {
9      console.log(data.toString());
10    },
11    done(failureCount) {
12      // Your code to run when client tests are done running
13    },
14  });
15}
16
17export { start };

And in your client code, you need to set some properties on window so that the browser script knows what is happening. Here is an example using Mocha:

1// Run the client tests. Meteor calls the `runTests` function exported by
2// the driver package on the client.
3function runTests() {
4  // These `window` properties are all used by the browser script to
5  // know what is happening.
6  window.testsAreRunning = true;
7  mocha.run((failures) => {
8    window.testsAreRunning = false;
9    window.testFailures = failures;
10    window.testsDone = true;
11  });
12}
13
14export { runTests };

Dependencies

When using your test driver package, you will need to install the necessary NPM package dependency and indicate which headless browser you want to use.

Puppeteer

$ npm i --save-dev puppeteer@^1.5.0
$ TEST_BROWSER_DRIVER=puppeteer meteor test --once --driver-package <your package name>

Selenium ChromeDriver

Meteor 1.6+:

$ meteor npm i --save-dev selenium-webdriver chromedriver
$ TEST_BROWSER_DRIVER=chrome meteor test --once --driver-package <your package name>

Chrome will run headless unless you export TEST_BROWSER_VISIBLE=1.

Additional command-line arguments for Chrome can be specified using the TEST_CHROME_ARGS environment variable. Multiple arguments are supported, separated by spaces. If you need to include a space inside an individual argument, use %20 instead of the space.

Meteor < 1.6:

NOTE: Currently you must pin to exactly version 3.0.0-beta-2 of selenium-webdriver for earlier versions of Meteor because the latest webdriver package only works on Node 6.x+. The -E in the command below is important!

$ meteor npm i -E --save-dev selenium-webdriver@3.0.0-beta-2
$ meteor npm i --save-dev chromedriver
$ TEST_BROWSER_DRIVER=chrome meteor test --once --driver-package <your package name>

Nightmare/Electron

$ npm i --save-dev nightmare
$ TEST_BROWSER_DRIVER=nightmare meteor test --once --driver-package <your package name>

You can export TEST_BROWSER_VISIBLE=1 to show the Electron window while tests run.

Nightmare's default wait() timeout is 30 seconds. It may not be enough to run all your tests. You can change it using the environment variable NIGHTMARE_WAIT_TIMEOUT=60000 to set it to 60 seconds, for example.

PhantomJS

Support for PhantomJS has been deprecated because it's development is suspended. For more information on why it got suspended, please take a look at the repository

$ npm i --save-dev phantomjs-prebuilt
$ TEST_BROWSER_DRIVER=phantomjs meteor test --once --driver-package <your package name>