mocha-multi¶ ↑
A bit of a hack to get multiple reporters working with mocha
Usage¶ ↑
npm install mocha-multi --save-dev mocha --reporter mocha-multi
Choosing Reporters¶ ↑
For both methods below, the special value of -
(hyphen) for destination uses normal stdout/stderr.
With the multi
Environment Variable¶ ↑
Set the environment variable multi
to whitespace-separated type=destination pairs.
multi='dot=- xunit=file.xml doc=docs.html' mocha -R mocha-multi
With --reporter-options
¶ ↑
Pass --reporter-options
with comma-separated type=destination pairs.
mocha -R mocha-multi --reporter-options dot=-,xunit=file.xml,doc=docs.html
From a file¶ ↑
Using either of the above methods, include a type=destination pair where the type is mocha-multi and the destination is a filename, e.g. mocha-multi=mocha-multi-reporters.json
More reporters will be loaded from the named file, which must be valid JSON in the same data format described below for passing reporterOptions to Mocha programmatically.
Using mocha-multi programmatically¶ ↑
You may specify the desired reporters (and their options) by passing reporterOptions
to the Mocha contructor.
For example: the following config is the equivalent of setting multi='spec=- Progress=/tmp/mocha-multi.Progress.out'
, with the addition of passing the verbose: true
option to the Progress reporter.
var reporterOptions = { Progress: { stdout: "/tmp/mocha-multi.Progress.out", options: { verbose: true } }, spec: "-" }; var mocha = new Mocha({ ui: "bdd" reporter: "mocha-multi", reporterOptions: reporterOptions }); mocha.addFile("test/dummy-spec.js"); mocha.run(function onRun(failures){ console.log(failures); });
The options will be passed as the second argument to the reporter constructor.
How it works¶ ↑
A big hack that keeps changing the value of process.stdout and process.stderr whenever a reporter is doing its thing.
Seriously?¶ ↑
Yeah, Sorry!
All the hacks¶ ↑
This is very hacky, specifically:
-
The
process
andconsole
objects get their internal state messed with -
process.exit
is hacked to wait for streams to finish writing -
Only works if reporters queue writes synchronously in event handlers
Could this be a bit less hacky?¶ ↑
-
Now that github.com/mochajs/mocha/pull/1059 is released the process.exit hack could maybe be tidier
-
Having each reporter run in a child process would make it eaiser to capture their streams, but might lead to other issues
TODO¶ ↑
-
Add tests for coverage reports
-
Add tests which produce multiple reports at once
-
Add test for help text
-
Add test that uses –no-exit
HISTORY¶ ↑
1.0.0 (unreleased)¶ ↑
The breaking changes are mostly around internals, and shouldn't affect most people.
-
BREAKING: MochaMulti.prototype.done removed, new MochaMulti(…).done now optional
-
BREAKING: new MochaMulti(…).options removed
-
BREAKING: Must run at least mocha@>=2.2.0
-
BREAKING: Must run at least node@>=6.0.0
-
Correctly set exit code when writing to files
-
Declare support for mocha@^4.0.0
-
Support running mocha without a run callback
-
Upgrade to ES2015+ via eslint-preset-airbnb-base (MochaMulti is an ES class)
-
Avoid patching stderr, now that mocha does not write to it