fix: make TeleSuite.project work for all suites (#29177)

Fixes https://github.com/microsoft/playwright/issues/29173
This commit is contained in:
Yury Semikhatsky 2024-01-25 13:44:08 -08:00 committed by GitHub
parent 85c42939b1
commit 0113e8455b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 3 deletions

View File

@ -209,8 +209,8 @@ export class TeleReporterReceiver {
this._rootSuite.suites.push(projectSuite);
projectSuite.parent = this._rootSuite;
}
const p = this._parseProject(project);
projectSuite.project = () => p;
// Always update project in watch mode.
projectSuite._project = this._parseProject(project);
this._mergeSuitesInto(project.suites, projectSuite);
// Remove deleted tests when listing. Empty suites will be auto-filtered
@ -428,6 +428,7 @@ export class TeleSuite implements SuitePrivate {
_timeout: number | undefined;
_retries: number | undefined;
_fileId: string | undefined;
_project: TeleFullProject | undefined;
_parallelMode: 'none' | 'default' | 'serial' | 'parallel' = 'none';
readonly _type: 'root' | 'project' | 'file' | 'describe';
@ -459,7 +460,7 @@ export class TeleSuite implements SuitePrivate {
}
project(): TeleFullProject | undefined {
return undefined;
return this._project ?? this.parent?.project();
}
}

View File

@ -1677,3 +1677,35 @@ test('merge reports without --config preserves path separators', async ({ runInl
expect(output).toContain(`test: ${test.info().outputPath('dir1', 'tests2', 'b.test.js').replaceAll(path.sep, otherSeparator)}`);
expect(output).toContain(`test title: ${'tests2' + otherSeparator + 'b.test.js'}`);
});
test('TestSuite.project() should return owning project', async ({ runInlineTest, mergeReports }) => {
test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/29173' });
const files1 = {
'echo-reporter.js': `
export default class EchoReporter {
onTestBegin(test) {
console.log('test project:', test.parent?.project()?.name);
}
};
`,
'merge.config.ts': `module.exports = {
testDir: 'mergeRoot',
reporter: './echo-reporter.js'
};`,
'playwright.config.ts': `module.exports = {
testDir: 'tests',
reporter: [['blob', { outputDir: 'blob-report' }]],
projects: [{name: 'my-project'}]
};`,
'tests/a.test.js': `
import { test, expect } from '@playwright/test';
test('math 1', async ({}) => { });
`,
};
await runInlineTest(files1);
const { exitCode, output } = await mergeReports(test.info().outputPath('blob-report'), undefined, { additionalArgs: ['--config', 'merge.config.ts'] });
expect(exitCode).toBe(0);
console.log(output);
expect(output).toContain(`test project: my-project`);
});