DEV Community

Cover image for Mocha.js - how to enable multiple test runners on CI/CD?

Mocha.js - how to enable multiple test runners on CI/CD?

Rafal Hofman
Software developer @BrightInventions/Baltic Data Science
Originally published at Updated on ・1 min read

One of our projects is running automated tests on CI/CD AzurePipelines.

For the test runner, AzurePipeline supports several test results templates but not the default Mocha spec one.

This is why tests are running on the mocha Junit reporter producing the JUnit XML result.

As there was a difference between running tests locally and on CI/CD environment, I wanted to debug the logs of the job. That what not possible as the Mocha JUnit reporter was not collecting console outputs/errors.

Mocha.js does not support multiple runners right now. The solution for that was to introduce own runner, which combines both Mocha JUnit reporter and default spec Mocha reporter:

'use strict';

const Mocha = require('mocha');
const JUnit = require('mocha-junit-reporter');
const Spec = Mocha.reporters.Spec;
const Base = Mocha.reporters.Base;

// This is combination of spec (mocha normal) + junit reporter so both is displayed on azure
class AzurePipelinesReporter extends Base {
    constructor(runner, options) {
        super(runner, options);
        this._junitReporter = new JUnit(runner, options);
        this._specReporter = new Spec(runner, options);
module.exports = AzurePipelinesReporter;
Enter fullscreen mode Exit fullscreen mode

Then, the custom reporter can be used by specyfing the file name and flags to both reporters if needed:

mocha --reporter azurePipelinesReporter.js --reporter-options mochaFile=some_path_to_results

Let me know if you had a similar problem, stay tuned for the next tips & tricks!

This blog post was original posted on

Discussion (0)