GitXplorerGitXplorer
g

mocha-multi

public
77 stars
22 forks
17 issues

Commits

List of commits on branch master.
Unverified
a56aafba339248cc07468f8233b63d6d0dec91a1

1.1.7

gglenjamin committed 2 years ago
Unverified
8834c2080322aacc48b54fab1d6842e379b0e074

Relax peerDependency range to allow future mocha versions

gglenjamin committed 2 years ago
Unverified
503e448280f0869b156fc98b695f30b1b6a12729

1.1.6

gglenjamin committed 3 years ago
Verified
54812ab86e7263ccbb06694324e01f81b8054726

Merge pull request #85 from MarcCelani-at/upgrade-mochamulti

gglenjamin committed 3 years ago
Unverified
3bfaf52e8c67d99159ce248c9644a1c295b457ff

upgrade mocha-multi

gglenjamin committed 3 years ago
Unverified
05246857db4a901fe793c8fe2b03af5a43815f65

upgrade mocha-multi

MMarcCelani-at committed 3 years ago

README

The README file for this repository.

mocha-multi

A bit of a hack to get multiple reporters working with mocha

Build Status NPM version

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 and console 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