Skip to content

Commit

Permalink
add custom mocha reporter
Browse files Browse the repository at this point in the history
  • Loading branch information
rileyajones committed Apr 9, 2021
1 parent 297ac2e commit 98793a2
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 5 deletions.
7 changes: 6 additions & 1 deletion build-system/tasks/e2e/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@ const fs = require('fs');
const glob = require('glob');
const http = require('http');
const Mocha = require('mocha');
const MochaJUnitReporter = require('mocha-junit-reporter');
const path = require('path');
const {
createCtrlcHandler,
exitCtrlcHandler,
} = require('../../common/ctrlcHandler');
const {buildRuntime, getFilesFromArgv} = require('../../common/utils');
const {createMultiplexedReporter} = require('./mocha-report-multiplexer');
const {cyan} = require('kleur/colors');
const {execOrDie} = require('../../common/exec');
const {HOST, PORT, startServer, stopServer} = require('../serve');
Expand Down Expand Up @@ -96,7 +98,10 @@ function createMocha_() {
};

if (isCircleciBuild()) {
options.reporter = 'mocha-junit-reporter';
options.reporter = createMultiplexedReporter([
options.reporter,
MochaJUnitReporter,
]);
options.reporterOptions = {
mochaFile: 'result-reports/e2e.xml',
};
Expand Down
48 changes: 48 additions & 0 deletions build-system/tasks/e2e/mocha-report-multiplexer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* Copyright 2021 The AMP HTML Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS-IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const Mocha = require('mocha');
const {Base} = Mocha.reporters;

/**
* Creates a custom Mocha reporter which runs many reporters at once.
* @param {Base[]} reporters
* @return {Function<*,MochaReportMultiplexer>}
*/
function createMultiplexedReporter(reporters) {
return class DynamicReportMultiplexer extends Base {
/**
* @param {*} runner
* @param {Mocha.Runner.options} options
*/
constructor(runner, options) {
super(runner);
// If there are too many reporters listening to events on the runner a
// warning will be displayed about a potential emitter leak. This should
// allow each reporter to listen to every event without exceeding the max.
// The default max listeners is 10.
const potentialEvents = Object.keys(Mocha.Runner.constants);
runner.setMaxListeners(potentialEvents.length * reporters.length);

this.reporters = reporters.map(
(reporter) => new reporter(runner, options)
);
}
};
}

module.exports = {
createMultiplexedReporter,
};
4 changes: 0 additions & 4 deletions build-system/test-configs/karma.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,6 @@ module.exports = {
},
},

junitReporter: {
useBrowserName: false,
},

port: 9876,

colors: true,
Expand Down

0 comments on commit 98793a2

Please sign in to comment.