Wrapper to run nemo/mocha suites
Install nemo-runner and nemo
npm install --save-dev nemo nemo-runner
Install chromedriver and GeckoDriver to your $PATH
Add tests directory structure
test functional config config.json spec spec.js
"driver":"browser": "phantomjs""data":"baseUrl": """profiles":"base":"tests": "path:spec/*.js""env":"DEBUG": "nemo*""mocha":"timeout": 180000"retries": 0"require": "babel-register""grep": "argv:grep""chrome":"driver":"browser": "chrome""firefox":"driver":"browser": "firefox"
Add run script(s) to package.json (you can also just run the full command directly but this is cleaner)
"scripts":"start": "node index.js""nemo": "nemo-runner -B test/functional -P firefox,chrome -G @foo@,@bar@""nemo:debug": "nemo-runner --inspect --debug-brk -B test/functional -P firefox -G @foo@"
Give it a try
npm run nemo
You should have seen two Firefox and two Chrome browser instances open and execute the scripts.
Usage: _nemo-runner [options]Options:-h, --help output usage information-V, --version output the version number-B, --base-directory <path> parent directory
is the main profile configuration that others will merge into
is an absolute path based glob pattern. (e.g.
only valid for 'base'.
base.data(alternative to the
mocha options. described elsewhere
any environment variables you want in the test process
a number which represents the max limit of concurrent suites nemo-runner will execute in parallel - if not provided there is no limit
Recommended reporters are
nemo-runner will automatically append profile, grep, and test file names to report names when using any of these.
nemo-runner injects a
nemo instance into the Mocha context (for it, before, after, etc functions) which can be accessed by
this.nemo within the test suites.
nemo-runner will execute in parallel
-P (profile) x
-G (grep) mocha instances. The example above uses "browser" as the
profile dimension and suite name as the "grep" dimension. Giving 2x2=4 parallel executions.
In addition to
grep, are the dimensions
file will multiply the existing # of instances by the # of files selected by your configuration.
data will multiply the existing # of instances by the # of keys found under
profiles.base.data. It can also be overriden per-profile. It will also replace
nemo.data with the value of each keyed object. In other words, you can use this to do parallel, data-driven testing.
If you have the following base profile configuration:
"profiles":"base":"data":"US": "url": """FR": "url": """parallel": "data""tests": "path:spec/test-spec.js""mocha"://...
Then the following test will run twice (in parallel) with corresponding values of
Since the stdout output is coming to the parent process as it happens, it is most useful to incorporate a reporter which can output a separate file per parallel instance. Try using "mochawesome" for that. You will find that nemo-runner is already set up to use mochawesome reports and give them an appropriate filename. Please have a look at the nemo-example-app for a full example using "mochawesome".
The properties passed in to the
"mocha" property of
config.json will be applied to the
mocha instances that are created. In general, these properties correlate with the
mocha command line arguments. E.g. if you want this:
mocha --timeout 180000
You should add this to the
"mocha" property within
mocha instances programmatically. Unfortunately, not all
mocha command line options are available when instantiating it this way. One of the arguments that is not supported is the
--require flag, which useful if you want to
require a module, e.g.
babel-register for transpilation. Thus, we added a
"require" property in
config.json, which takes a string of a single npm module name, or an array of npm module names. If it is an array,
require each one before instantiating the