npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mocha-multi

v1.1.7

Published

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

Downloads

376,748

Readme

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