From 6b3bb1e3c09da24516c666a7232bf656f97df84a Mon Sep 17 00:00:00 2001 From: Ricardo Barbosa <3788982+nextlevelbeard@users.noreply.github.com> Date: Thu, 23 Mar 2023 16:17:35 +0000 Subject: [PATCH] Handle `file://` in specs of junit reporter - fixes #9352 (#10035) * Handle file:// in specs of junit reporter - fixes #9352 * Update packages/wdio-junit-reporter/tests/reporter.test.ts --------- Co-authored-by: Christian Bromann --- packages/wdio-junit-reporter/src/index.ts | 7 ++++++- .../tests/__snapshots__/reporter.test.ts.snap | 4 ++++ .../tests/reporter.test.ts | 20 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/wdio-junit-reporter/src/index.ts b/packages/wdio-junit-reporter/src/index.ts index e594e96a3de..ae3e012f56e 100644 --- a/packages/wdio-junit-reporter/src/index.ts +++ b/packages/wdio-junit-reporter/src/index.ts @@ -3,6 +3,8 @@ import type { SuiteStats, RunnerStats, TestStats } from '@wdio/reporter' import WDIOReporter from '@wdio/reporter' import type { Capabilities } from '@wdio/types' +const FILE_PROTOCOL_REGEX = /^file:\/\// + import { limit } from './utils.js' import type { JUnitReporterOptions } from './types.js' @@ -268,7 +270,10 @@ class JunitReporter extends WDIOReporter { continue } const suite = this.suites[suiteKey] - if (isCucumberFrameworkRunner && suite.type === type && specFileName === suite.file) { + + const sameFeature = isCucumberFrameworkRunner && specFileName.replace(FILE_PROTOCOL_REGEX, '') === suite.file.replace(FILE_PROTOCOL_REGEX, '') + + if (isCucumberFrameworkRunner && suite.type === type && sameFeature) { builder = this._addCucumberFeatureToBuilder(builder, runner, specFileName, suite) } else if (!isCucumberFrameworkRunner) { builder = this._addSuiteToBuilder(builder, runner, specFileName, suite) diff --git a/packages/wdio-junit-reporter/tests/__snapshots__/reporter.test.ts.snap b/packages/wdio-junit-reporter/tests/__snapshots__/reporter.test.ts.snap index 85336857605..fec3f39bf52 100644 --- a/packages/wdio-junit-reporter/tests/__snapshots__/reporter.test.ts.snap +++ b/packages/wdio-junit-reporter/tests/__snapshots__/reporter.test.ts.snap @@ -16,6 +16,10 @@ exports[`wdio-junit-reporter > generates xml output (Cucumber-style) (with packa exports[`wdio-junit-reporter > generates xml output (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > generates xml output (Cucumber-style) when feature has file:// protocol 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; + +exports[`wdio-junit-reporter > generates xml output (Cucumber-style) when feature has file:// protocol and the addFileAttribute option is set 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; + exports[`wdio-junit-reporter > generates xml output 1`] = `")atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>"`; exports[`wdio-junit-reporter > generates xml output correctly when error options are set (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>(./step_definitions/steps.js:642:21)]]>"`; diff --git a/packages/wdio-junit-reporter/tests/reporter.test.ts b/packages/wdio-junit-reporter/tests/reporter.test.ts index 0fa14fd03e4..396f9dbc891 100644 --- a/packages/wdio-junit-reporter/tests/reporter.test.ts +++ b/packages/wdio-junit-reporter/tests/reporter.test.ts @@ -115,6 +115,26 @@ describe('wdio-junit-reporter', () => { expect(reporter['_buildJunitXml'](mochaRunnerLog as any).replace(/\s/g, '')).toMatchSnapshot() }) + it('generates xml output (Cucumber-style) when feature has file:// protocol', () => { + reporter = new WDIOJunitReporter({ stdout: true }) + reporter.suites = { ...featuresLog } as any + const runner = { ...cucumberRunnerLog } + runner.specs = runner.specs.map(s => `file://${s}`) + + // verifies the content of the report but omits format by stripping all whitespace and new lines + expect(reporter['_buildJunitXml'](runner as any).replace(/\s/g, '')).toMatchSnapshot() + }) + + it('generates xml output (Cucumber-style) when feature has file:// protocol and the addFileAttribute option is set', () => { + reporter = new WDIOJunitReporter({ stdout: true, addFileAttribute: true }) + reporter.suites = { ...featuresLog } as any + const runner = { ...cucumberRunnerLog } + runner.specs = runner.specs.map(s => `file://${s}`) + + // verifies the content of the report but omits format by stripping all whitespace and new lines + expect(reporter['_buildJunitXml'](runner as any).replace(/\s/g, '')).toMatchSnapshot() + }) + it('generates xml output (Cucumber-style)', () => { reporter.suites = featuresLog as any