diff --git a/packages/playwright-ct-core/src/vitePlugin.ts b/packages/playwright-ct-core/src/vitePlugin.ts index e4a0a43266..dbe31310c2 100644 --- a/packages/playwright-ct-core/src/vitePlugin.ts +++ b/packages/playwright-ct-core/src/vitePlugin.ts @@ -48,6 +48,10 @@ export function createPlugin(): TestRunnerPlugin { configDir = configDirectory; }, + populateDependencies: async (config: FullConfig, configDir: string) => { + await buildBundle(config, configDir); + }, + begin: async (suite: Suite) => { const result = await buildBundle(config, configDir); if (!result) @@ -69,10 +73,6 @@ export function createPlugin(): TestRunnerPlugin { if (stoppableServer) await new Promise(f => stoppableServer.stop(f)); }, - - populateDependencies: async () => { - await buildBundle(config, configDir); - }, }; } diff --git a/packages/playwright/src/plugins/index.ts b/packages/playwright/src/plugins/index.ts index 3502d90966..e1c7355600 100644 --- a/packages/playwright/src/plugins/index.ts +++ b/packages/playwright/src/plugins/index.ts @@ -20,7 +20,7 @@ import type { ReporterV2 } from '../reporters/reporterV2'; export interface TestRunnerPlugin { name: string; setup?(config: FullConfig, configDir: string, reporter: ReporterV2): Promise; - populateDependencies?(): Promise; + populateDependencies?(config: FullConfig, configDir: string): Promise; begin?(suite: Suite): Promise; end?(): Promise; teardown?(): Promise; diff --git a/packages/playwright/src/runner/runner.ts b/packages/playwright/src/runner/runner.ts index 5f5b5bf145..da2c1052f0 100644 --- a/packages/playwright/src/runner/runner.ts +++ b/packages/playwright/src/runner/runner.ts @@ -143,8 +143,13 @@ export class Runner { return { errors: result.errors, testFiles: [] }; const resolvedFiles = (files as string[]).map(file => path.resolve(process.cwd(), file)); - for (const plugin of this._config.plugins) - await plugin.instance?.populateDependencies?.(); + + for (const plugin of this._config.plugins) { + if (!plugin.instance) + plugin.instance = typeof plugin.factory === 'function' ? await plugin.factory() : plugin.factory; + + await plugin.instance.populateDependencies?.(this._config.config, this._config.configDir); + } return { testFiles: affectedTestFiles(resolvedFiles) }; } }