From 6d6ee2bfe9a4e8ed10949bea9fd687644f571c62 Mon Sep 17 00:00:00 2001 From: Jack Robards Date: Thu, 27 Feb 2025 16:42:53 -0600 Subject: [PATCH] feat(test-runner-junit-reporter): Add support for flat test files to Web Test runner's junit-reporter --- .changeset/rotten-brooms-carry.md | 5 ++++ .../src/junitReporter.ts | 10 +++++--- .../test/fixtures/flat/expected.xml | 20 ++++++++++++++++ .../test/fixtures/flat/flat-test.js | 23 +++++++++++++++++++ .../test/fixtures/multiple/expected.xml | 17 ++++++++++++++ .../test/fixtures/multiple/flat-test.js | 23 +++++++++++++++++++ .../test/junitReporter.test.ts | 8 +++++++ 7 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 .changeset/rotten-brooms-carry.md create mode 100644 packages/test-runner-junit-reporter/test/fixtures/flat/expected.xml create mode 100644 packages/test-runner-junit-reporter/test/fixtures/flat/flat-test.js create mode 100644 packages/test-runner-junit-reporter/test/fixtures/multiple/flat-test.js diff --git a/.changeset/rotten-brooms-carry.md b/.changeset/rotten-brooms-carry.md new file mode 100644 index 000000000..af5c6b784 --- /dev/null +++ b/.changeset/rotten-brooms-carry.md @@ -0,0 +1,5 @@ +--- +'@web/test-runner-junit-reporter': minor +--- + +chore: Add support for flat test files to junit reporter diff --git a/packages/test-runner-junit-reporter/src/junitReporter.ts b/packages/test-runner-junit-reporter/src/junitReporter.ts index 7ba8d5b79..dfbd805a9 100644 --- a/packages/test-runner-junit-reporter/src/junitReporter.ts +++ b/packages/test-runner-junit-reporter/src/junitReporter.ts @@ -69,7 +69,7 @@ interface TestSuiteXMLAttributes { const assignSessionAndSuitePropertiesToTests = ({ testResults, ...rest -}: TestSession): TestResultWithMetadata[] => { +}: TestSession, rootDir: string): TestResultWithMetadata[] => { const assignToTest = (parentSuiteName: string) => (test: TestResult): TestResultWithMetadata => { @@ -87,7 +87,11 @@ const assignSessionAndSuitePropertiesToTests = ({ const suites = testResults?.suites ?? []; - return suites.flatMap(assignToSuite('')); + const testsWithoutSuite = testResults?.tests ?? []; + + const suiteName = `${rest.browser.name}_${rest.browser.type}_${rest.testFile.replace(rootDir, '')}`; + + return [...suites.flatMap(assignToSuite('')), ...testsWithoutSuite.flatMap(assignToTest(suiteName))]; }; const toResultsWithMetadataByBrowserTestFileName = ( @@ -291,7 +295,7 @@ function getTestRunXML({ }): string { const testsuites = Object.entries( sessions - .flatMap(assignSessionAndSuitePropertiesToTests) + .flatMap(s => assignSessionAndSuitePropertiesToTests(s, rootDir)) .reduce( toResultsWithMetadataByBrowserTestFileName, {} as TestResultsWithMetadataByBrowserTestFileName, diff --git a/packages/test-runner-junit-reporter/test/fixtures/flat/expected.xml b/packages/test-runner-junit-reporter/test/fixtures/flat/expected.xml new file mode 100644 index 000000000..d676f4499 --- /dev/null +++ b/packages/test-runner-junit-reporter/test/fixtures/flat/expected.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + > (packages/test-runner-junit-reporter/test/fixtures/flat/flat-test.js:12:27)]]> + + + + + + + \ No newline at end of file diff --git a/packages/test-runner-junit-reporter/test/fixtures/flat/flat-test.js b/packages/test-runner-junit-reporter/test/fixtures/flat/flat-test.js new file mode 100644 index 000000000..d59f48174 --- /dev/null +++ b/packages/test-runner-junit-reporter/test/fixtures/flat/flat-test.js @@ -0,0 +1,23 @@ +import '../../../../../node_modules/chai/chai.js'; + +it('under addition', function () { + chai.expect(1 + 1).to.equal(2); +}); + +it('null hypothesis', function () { + chai.expect(true).to.be.true; +}); + +it('asserts error', function () { + chai.expect(false).to.be.true; +}); + +it.skip('tbd: confirm true positive', function () { + chai.expect(false).to.be.false; +}); + +it('reports logs to JUnit', function () { + const actual = '🤷‍♂️'; + console.log('actual is ', actual); + chai.expect(typeof actual).to.equal('string'); +}); diff --git a/packages/test-runner-junit-reporter/test/fixtures/multiple/expected.xml b/packages/test-runner-junit-reporter/test/fixtures/multiple/expected.xml index 13af3840b..7690488ff 100644 --- a/packages/test-runner-junit-reporter/test/fixtures/multiple/expected.xml +++ b/packages/test-runner-junit-reporter/test/fixtures/multiple/expected.xml @@ -1,5 +1,22 @@ + + + + + + + + + + > (packages/test-runner-junit-reporter/test/fixtures/multiple/flat-test.js:12:27)]]> + + + + + + diff --git a/packages/test-runner-junit-reporter/test/fixtures/multiple/flat-test.js b/packages/test-runner-junit-reporter/test/fixtures/multiple/flat-test.js new file mode 100644 index 000000000..d59f48174 --- /dev/null +++ b/packages/test-runner-junit-reporter/test/fixtures/multiple/flat-test.js @@ -0,0 +1,23 @@ +import '../../../../../node_modules/chai/chai.js'; + +it('under addition', function () { + chai.expect(1 + 1).to.equal(2); +}); + +it('null hypothesis', function () { + chai.expect(true).to.be.true; +}); + +it('asserts error', function () { + chai.expect(false).to.be.true; +}); + +it.skip('tbd: confirm true positive', function () { + chai.expect(false).to.be.false; +}); + +it('reports logs to JUnit', function () { + const actual = '🤷‍♂️'; + console.log('actual is ', actual); + chai.expect(typeof actual).to.equal('string'); +}); diff --git a/packages/test-runner-junit-reporter/test/junitReporter.test.ts b/packages/test-runner-junit-reporter/test/junitReporter.test.ts index 79e63fed3..79a48f0b1 100644 --- a/packages/test-runner-junit-reporter/test/junitReporter.test.ts +++ b/packages/test-runner-junit-reporter/test/junitReporter.test.ts @@ -95,4 +95,12 @@ describe('junitReporter', function () { expect(actual).to.equal(expected); }); }); + + describe('for flat test files', function () { + const fixtureDir = path.join(__dirname, 'fixtures/flat'); + it('produces expected results', async function () { + const { actual, expected } = await run(fixtureDir); + expect(actual).to.equal(expected); + }); + }); });