From 92b6b52c14aa7bab5c773175b976ade2c67a4ca0 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Thu, 25 Jul 2024 17:11:51 +0200 Subject: [PATCH] remove `dev-server` hook --- packages/playwright-ct-core/index.js | 4 ---- packages/playwright-ct-core/src/vitePlugin.ts | 6 ++++++ packages/playwright/src/plugins/index.ts | 3 ++- packages/playwright/src/program.ts | 6 ++++-- packages/playwright/src/runner/testServer.ts | 11 +++++++++-- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/playwright-ct-core/index.js b/packages/playwright-ct-core/index.js index a339226e4d..1a4f185a31 100644 --- a/packages/playwright-ct-core/index.js +++ b/packages/playwright-ct-core/index.js @@ -16,7 +16,6 @@ const { test: baseTest, expect, devices, defineConfig: originalDefineConfig } = require('playwright/test'); const { fixtures } = require('./lib/mount'); -const { runDevServerCommand } = require('./lib/cliOverrides'); const { createPlugin } = require('./lib/vitePlugin'); const defineConfig = (...configs) => { @@ -29,9 +28,6 @@ const defineConfig = (...configs) => { babelPlugins: [ [require.resolve('./lib/tsxTransform')] ], - cli: { - 'dev-server': runDevServerCommand, - }, } }; }; diff --git a/packages/playwright-ct-core/src/vitePlugin.ts b/packages/playwright-ct-core/src/vitePlugin.ts index ab5d1a6ee7..57a332d18b 100644 --- a/packages/playwright-ct-core/src/vitePlugin.ts +++ b/packages/playwright-ct-core/src/vitePlugin.ts @@ -32,6 +32,8 @@ import type { ComponentRegistry } from './viteUtils'; import { createConfig, frameworkConfig, hasJSComponents, populateComponentsFromTests, resolveDirs, resolveEndpoint, transformIndexFile } from './viteUtils'; import { resolveHook } from 'playwright/lib/transform/transform'; import { removeFolderAndLogToConsole } from 'playwright/lib/runner/testServer'; +import { runDevServer } from './devServer'; +import type { FullConfigInternal } from 'playwright/lib/common/config'; const log = debug('pw:vite'); @@ -79,6 +81,10 @@ export function createPlugin(): TestRunnerPlugin { const dirs = await resolveDirs(configDir, config); if (dirs) await removeFolderAndLogToConsole(dirs.outDir); + }, + + runDevServer: async (config: FullConfigInternal) => { + await runDevServer(config); } }; } diff --git a/packages/playwright/src/plugins/index.ts b/packages/playwright/src/plugins/index.ts index 1f52a51fd9..e2c1bf275c 100644 --- a/packages/playwright/src/plugins/index.ts +++ b/packages/playwright/src/plugins/index.ts @@ -15,6 +15,7 @@ */ import type { FullConfig, Suite } from '../../types/testReporter'; +import type { FullConfigInternal } from '../common/config'; import type { ReporterV2 } from '../reporters/reporterV2'; export interface TestRunnerPlugin { @@ -26,7 +27,7 @@ export interface TestRunnerPlugin { teardown?(): Promise; clearCache?(): Promise; - runDevServer?(): Promise; + runDevServer?(config: FullConfigInternal): Promise<() => Promise>; } export type TestRunnerPluginRegistration = { diff --git a/packages/playwright/src/program.ts b/packages/playwright/src/program.ts index 7cbe7e5461..2f403b9507 100644 --- a/packages/playwright/src/program.ts +++ b/packages/playwright/src/program.ts @@ -97,8 +97,10 @@ function addDevServerCommand(program: Command) { const configInternal = await loadConfigFromFileRestartIfNeeded(options.config); if (!configInternal) return; - const { config } = configInternal; - const implementation = (config as any)['@playwright/test']?.['cli']?.['dev-server']; + + await testServer.setupPlugins(configInternal); + + const implementation = configInternal.plugins.map(p => p.instance!).find(p => p.runDevServer)?.runDevServer; if (implementation) { await implementation(configInternal); } else { diff --git a/packages/playwright/src/runner/testServer.ts b/packages/playwright/src/runner/testServer.ts index 1f67809744..ed62e06b1a 100644 --- a/packages/playwright/src/runner/testServer.ts +++ b/packages/playwright/src/runner/testServer.ts @@ -192,7 +192,10 @@ class TestServerDispatcher implements TestServerInterface { reporter.onError(error!); return { status: 'failed', report }; } - const devServerCommand = (config.config as any)['@playwright/test']?.['cli']?.['dev-server']; + + await setupPlugins(config); + + const devServerCommand = config.plugins.map(p => p.instance!).find(p => p.runDevServer)?.runDevServer; if (!devServerCommand) { reporter.onError({ message: 'No dev-server command found in the configuration' }); return { status: 'failed', report }; @@ -515,7 +518,7 @@ export async function resolveCtDirs(config: FullConfigInternal) { }; } -export async function clearCacheAndLogToConsole(config: FullConfigInternal) { +export async function setupPlugins(config: FullConfigInternal) { const errors: reporterTypes.TestError[] = []; const errorReporter = wrapReporterAsV2({ onError(error: reporterTypes.TestError) { @@ -526,6 +529,10 @@ export async function clearCacheAndLogToConsole(config: FullConfigInternal) { await taskRunner.run(new TestRun(config), 0); if (errors.length > 0) throw new Error('Failed to clear cache: ' + errors); +} + +export async function clearCacheAndLogToConsole(config: FullConfigInternal) { + await setupPlugins(config); for (const plugin of config.plugins) { if (!plugin.instance)