Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

mocha-multi

Package Overview
Dependencies
Maintainers
1
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mocha-multi

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

  • 1.1.7
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
90K
increased by7.78%
Maintainers
1
Weekly downloads
 
Created
Source

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

Keywords

FAQs

Package last updated on 15 Nov 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc