A bit of a hack to get multiple reporters working with mocha
npm install mocha-multi --save-dev
mocha --reporter mocha-multi
For both methods below, the special value of -
(hyphen) for destination uses normal stdout/stderr.
Set the environment variable multi
to whitespace-separated type=destination pairs.
multi='dot=- xunit=file.xml doc=docs.html' mocha -R mocha-multi
Pass --reporter-options
with comma-separated type=destination pairs.
mocha -R mocha-multi --reporter-options dot=-,xunit=file.xml,doc=docs.html
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.
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.
A big hack that keeps changing the value of process.stdout and process.stderr whenever a reporter is doing its thing.
Yeah, Sorry!
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
-
Now that mochajs/mocha#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
- Add tests for coverage reports
- Add tests which produce multiple reports at once
- Add test for help text
- Add test that uses --no-exit
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