mocha-multi v1.1.7
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 https://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
3 years ago
3 years ago
4 years ago
4 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
11 years ago
11 years ago
11 years ago
12 years ago
12 years ago
12 years ago
12 years ago