diff --git a/packages/html-reporter/playwright.config.ts b/packages/html-reporter/playwright.config.ts index cb1ed7b480..3d44fa8c77 100644 --- a/packages/html-reporter/playwright.config.ts +++ b/packages/html-reporter/playwright.config.ts @@ -24,7 +24,7 @@ const config: PlaywrightTestConfig = { retries: process.env.CI ? 2 : 0, reporter: 'html', use: { - vitePort: 3101, + ctPort: 3101, trace: 'on-first-retry', }, projects: [ ], diff --git a/packages/playwright-ct-react/index.d.ts b/packages/playwright-ct-react/index.d.ts index 76f294a34f..485cb0e658 100644 --- a/packages/playwright-ct-react/index.d.ts +++ b/packages/playwright-ct-react/index.d.ts @@ -26,7 +26,12 @@ import type { import type { InlineConfig } from 'vite'; export type PlaywrightTestConfig = Omit & { - use?: BasePlaywrightTestConfig['use'] & { vitePort?: number, viteConfig?: InlineConfig } + use?: BasePlaywrightTestConfig['use'] & { + ctPort?: number, + ctTemplateDir?: string, + ctCacheDir?: string, + ctViteConfig?: InlineConfig + } }; interface ComponentFixtures { diff --git a/packages/playwright-ct-svelte/index.d.ts b/packages/playwright-ct-svelte/index.d.ts index 479d70de17..0bec91cbc4 100644 --- a/packages/playwright-ct-svelte/index.d.ts +++ b/packages/playwright-ct-svelte/index.d.ts @@ -26,7 +26,12 @@ import type { import type { InlineConfig } from 'vite'; export type PlaywrightTestConfig = Omit & { - use?: BasePlaywrightTestConfig['use'] & { vitePort?: number, viteConfig?: InlineConfig } + use?: BasePlaywrightTestConfig['use'] & { + ctPort?: number, + ctTemplateDir?: string, + ctCacheDir?: string, + ctViteConfig?: InlineConfig + } }; interface ComponentFixtures { diff --git a/packages/playwright-ct-vue/index.d.ts b/packages/playwright-ct-vue/index.d.ts index 71adb2e133..ab27df0153 100644 --- a/packages/playwright-ct-vue/index.d.ts +++ b/packages/playwright-ct-vue/index.d.ts @@ -26,7 +26,12 @@ import type { import type { InlineConfig } from 'vite'; export type PlaywrightTestConfig = Omit & { - use?: BasePlaywrightTestConfig['use'] & { vitePort?: number, viteConfig?: InlineConfig } + use?: BasePlaywrightTestConfig['use'] & { + ctPort?: number, + ctTemplateDir?: string, + ctCacheDir?: string, + ctViteConfig?: InlineConfig + } }; interface ComponentFixtures { diff --git a/packages/playwright-test/src/plugins/vitePlugin.ts b/packages/playwright-test/src/plugins/vitePlugin.ts index b2658f08bd..b35d9c383f 100644 --- a/packages/playwright-test/src/plugins/vitePlugin.ts +++ b/packages/playwright-test/src/plugins/vitePlugin.ts @@ -28,6 +28,14 @@ import { assert } from 'playwright-core/lib/utils'; let previewServer: PreviewServer; const VERSION = 1; +type CtConfig = { + ctPort?: number; + ctTemplateDir?: string; + ctCacheDir?: string; + ctViteConfig?: InlineConfig; +}; + + export function createPlugin( registerSourceFile: string, frameworkPluginFactory: () => Plugin): TestRunnerPlugin { @@ -36,15 +44,16 @@ export function createPlugin( name: 'playwright-vite-plugin', setup: async (config: FullConfig, configDirectory: string, suite: Suite) => { - const use = config.projects[0].use as any; - const viteConfig: InlineConfig = use.viteConfig || {}; - const port = use.vitePort || 3100; configDir = configDirectory; - process.env.PLAYWRIGHT_VITE_COMPONENTS_BASE_URL = `http://localhost:${port}/playwright/index.html`; + const use = config.projects[0].use as CtConfig; + const port = use.ctPort || 3100; + const viteConfig: InlineConfig = use.ctViteConfig || {}; + const relativeTemplateDir = use.ctTemplateDir || 'playwright'; + process.env.PLAYWRIGHT_VITE_COMPONENTS_BASE_URL = `http://localhost:${port}/${relativeTemplateDir}/index.html`; const rootDir = viteConfig.root || configDir; - const outDir = viteConfig?.build?.outDir || path.join(rootDir, 'playwright', '.cache'); - const templateDir = path.join(rootDir, 'playwright'); + const templateDir = path.join(rootDir, relativeTemplateDir); + const outDir = viteConfig?.build?.outDir || (use.ctCacheDir ? path.resolve(rootDir, use.ctCacheDir) : path.resolve(templateDir, '.cache')); const buildInfoFile = path.join(outDir, 'metainfo.json'); let buildInfo: BuildInfo; @@ -79,7 +88,7 @@ export function createPlugin( frameworkPluginFactory() ]; const registerSource = await fs.promises.readFile(registerSourceFile, 'utf-8'); - viteConfig.plugins.push(vitePlugin(registerSource, buildInfo, componentRegistry)); + viteConfig.plugins.push(vitePlugin(registerSource, relativeTemplateDir, buildInfo, componentRegistry)); viteConfig.configFile = viteConfig.configFile || false; viteConfig.define = viteConfig.define || {}; viteConfig.define.__VUE_PROD_DEVTOOLS__ = true; @@ -218,7 +227,7 @@ async function parseTestFile(testFile: string): Promise { return result; } -function vitePlugin(registerSource: string, buildInfo: BuildInfo, componentRegistry: ComponentRegistry): Plugin { +function vitePlugin(registerSource: string, relativeTemplateDir: string, buildInfo: BuildInfo, componentRegistry: ComponentRegistry): Plugin { buildInfo.sources = {}; return { name: 'playwright:component-index', @@ -235,7 +244,7 @@ function vitePlugin(registerSource: string, buildInfo: BuildInfo, componentRegis } } - if (!id.endsWith('playwright/index.ts') && !id.endsWith('playwright/index.tsx') && !id.endsWith('playwright/index.js')) + if (!id.endsWith(`${relativeTemplateDir}/index.ts`) && !id.endsWith(`${relativeTemplateDir}/index.tsx`) && !id.endsWith(`${relativeTemplateDir}/index.js`)) return; const folder = path.dirname(id); diff --git a/packages/web/playwright.config.ts b/packages/web/playwright.config.ts index 19c070ef95..3c0df893c7 100644 --- a/packages/web/playwright.config.ts +++ b/packages/web/playwright.config.ts @@ -23,7 +23,7 @@ const config: PlaywrightTestConfig = { retries: process.env.CI ? 2 : 0, reporter: 'html', use: { - vitePort: 3102, + ctPort: 3102, trace: 'on-first-retry', }, projects: [ diff --git a/tests/components/ct-react-vite/package.json b/tests/components/ct-react-vite/package.json index 08d5db1819..6741c3197c 100644 --- a/tests/components/ct-react-vite/package.json +++ b/tests/components/ct-react-vite/package.json @@ -5,8 +5,7 @@ "scripts": { "dev": "vite", "build": "tsc && vite build", - "preview": "vite preview", - "playwright-dev": "vite --config playwright.vite.config.ts" + "preview": "vite preview" }, "dependencies": { "react": "^17.0.2", diff --git a/tests/components/ct-svelte-vite/package.json b/tests/components/ct-svelte-vite/package.json index 77b3ff5741..9fe19d682f 100644 --- a/tests/components/ct-svelte-vite/package.json +++ b/tests/components/ct-svelte-vite/package.json @@ -7,8 +7,7 @@ "dev": "vite", "build": "vite build", "preview": "vite preview", - "check": "svelte-check --tsconfig ./tsconfig.json", - "playwright-dev": "vite --config playwright.vite.config.ts" + "check": "svelte-check --tsconfig ./tsconfig.json" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.30", diff --git a/tests/components/ct-vue-vite/package.json b/tests/components/ct-vue-vite/package.json index 0261090fe5..a71f0e32b5 100644 --- a/tests/components/ct-vue-vite/package.json +++ b/tests/components/ct-vue-vite/package.json @@ -4,8 +4,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview --port 5050", - "playwright-dev": "vite --config playwright.vite.config.js" + "preview": "vite preview --port 5050" }, "dependencies": { "vue": "^3.2.31" diff --git a/tests/components/ct-vue-vite/playwright.config.ts b/tests/components/ct-vue-vite/playwright.config.ts index dbf9c593bd..273d2968f3 100644 --- a/tests/components/ct-vue-vite/playwright.config.ts +++ b/tests/components/ct-vue-vite/playwright.config.ts @@ -22,6 +22,8 @@ const config: PlaywrightTestConfig = { retries: process.env.CI ? 2 : 0, reporter: 'html', use: { + ctTemplateDir: 'playwright', + ctCacheDir: 'playwright/.cache', trace: 'on-first-retry', }, projects: [