From cf4e4c17544486f6442cb91eeb8f1acfc36d1339 Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Mon, 10 Aug 2020 11:20:34 +0200 Subject: [PATCH] Add JUnit reporter for unit tests (#104354) --- test/unit/browser/index.js | 61 +++++++++++++++++++++++-------------- test/unit/electron/index.js | 15 +++++---- 2 files changed, 45 insertions(+), 31 deletions(-) diff --git a/test/unit/browser/index.js b/test/unit/browser/index.js index 926d96f6352..a2640613c6e 100644 --- a/test/unit/browser/index.js +++ b/test/unit/browser/index.js @@ -10,6 +10,7 @@ const glob = require('glob'); const fs = require('fs'); const events = require('events'); const mocha = require('mocha'); +const MochaJUnitReporter = require('mocha-junit-reporter'); const url = require('url'); const minimatch = require('minimatch'); const playwright = require('playwright'); @@ -37,30 +38,44 @@ if (argv.help) { } const withReporter = (function () { - const reporterPath = path.join(path.dirname(require.resolve('mocha')), 'lib', 'reporters', argv.reporter); - let ctor; - - try { - ctor = require(reporterPath); - } catch (err) { - try { - ctor = require(argv.reporter); - } catch (err) { - ctor = process.platform === 'win32' ? mocha.reporters.List : mocha.reporters.Spec; - console.warn(`could not load reporter: ${argv.reporter}, using ${ctor.name}`); + if (argv.tfs) { + { + return (browserType, runner) => { + new mocha.reporters.Spec(runner); + new MochaJUnitReporter(runner, { + reporterOptions: { + testsuitesTitle: `${argv.tfs} ${process.platform}`, + mochaFile: process.env.BUILD_ARTIFACTSTAGINGDIRECTORY ? path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${browserType}-${argv.tfs.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`) : undefined + } + }); + } } + } else { + const reporterPath = path.join(path.dirname(require.resolve('mocha')), 'lib', 'reporters', argv.reporter); + let ctor; + + try { + ctor = require(reporterPath); + } catch (err) { + try { + ctor = require(argv.reporter); + } catch (err) { + ctor = process.platform === 'win32' ? mocha.reporters.List : mocha.reporters.Spec; + console.warn(`could not load reporter: ${argv.reporter}, using ${ctor.name}`); + } + } + + function parseReporterOption(value) { + let r = /^([^=]+)=(.*)$/.exec(value); + return r ? { [r[1]]: r[2] } : {}; + } + + let reporterOptions = argv['reporter-options']; + reporterOptions = typeof reporterOptions === 'string' ? [reporterOptions] : reporterOptions; + reporterOptions = reporterOptions.reduce((r, o) => Object.assign(r, parseReporterOption(o)), {}); + + return (_, runner) => new ctor(runner, { reporterOptions }) } - - function parseReporterOption(value) { - let r = /^([^=]+)=(.*)$/.exec(value); - return r ? { [r[1]]: r[2] } : {}; - } - - let reporterOptions = argv['reporter-options']; - reporterOptions = typeof reporterOptions === 'string' ? [reporterOptions] : reporterOptions; - reporterOptions = reporterOptions.reduce((r, o) => Object.assign(r, parseReporterOption(o)), {}); - - return (runner) => new ctor(runner, { reporterOptions }) })() const outdir = argv.build ? 'out-build' : 'out'; @@ -137,7 +152,7 @@ async function runTestsInBrowser(testModules, browserType) { console[msg.type()](msg.text(), await Promise.all(msg.args().map(async arg => await arg.jsonValue()))); }); - withReporter(new EchoRunner(emitter, browserType.toUpperCase())); + withReporter(browserType, new EchoRunner(emitter, browserType.toUpperCase())); // collection failures for console printing const fails = []; diff --git a/test/unit/electron/index.js b/test/unit/electron/index.js index dcd00923c9b..4b5ce8cb9e9 100644 --- a/test/unit/electron/index.js +++ b/test/unit/electron/index.js @@ -9,7 +9,7 @@ const { join } = require('path'); const path = require('path'); const mocha = require('mocha'); const events = require('events'); -// const MochaJUnitReporter = require('mocha-junit-reporter'); +const MochaJUnitReporter = require('mocha-junit-reporter'); const url = require('url'); const defaultReporterName = process.platform === 'win32' ? 'list' : 'spec'; @@ -136,13 +136,12 @@ app.on('ready', () => { if (argv.tfs) { new mocha.reporters.Spec(runner); - // TODO@deepak the mocha Junit reporter seems to cause a hang when running with Electron 6 inside docker container - // new MochaJUnitReporter(runner, { - // reporterOptions: { - // testsuitesTitle: `${argv.tfs} ${process.platform}`, - // mochaFile: process.env.BUILD_ARTIFACTSTAGINGDIRECTORY ? path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${argv.tfs.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`) : undefined - // } - // }); + new MochaJUnitReporter(runner, { + reporterOptions: { + testsuitesTitle: `${argv.tfs} ${process.platform}`, + mochaFile: process.env.BUILD_ARTIFACTSTAGINGDIRECTORY ? path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${argv.tfs.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`) : undefined + } + }); } else { const reporterPath = path.join(path.dirname(require.resolve('mocha')), 'lib', 'reporters', argv.reporter); let Reporter;