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);
+ });
+ });
});