From 94176229224e6a51d9f252275a56788418a61ab2 Mon Sep 17 00:00:00 2001 From: Zack Jackson <25274700+ScriptedAlchemy@users.noreply.github.com> Date: Tue, 23 Sep 2025 17:25:33 -0700 Subject: [PATCH] fix: ensure playwright single instance for vue2-in-vue3 --- vue2-in-vue3/package.json | 6 ++-- .../scripts/register-playwright-alias.cjs | 30 +++++++++++++++++++ vue2-in-vue3/scripts/run-playwright.cjs | 17 +++++++++++ 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 vue2-in-vue3/scripts/register-playwright-alias.cjs create mode 100755 vue2-in-vue3/scripts/run-playwright.cjs diff --git a/vue2-in-vue3/package.json b/vue2-in-vue3/package.json index 9489194580..cbafa18879 100644 --- a/vue2-in-vue3/package.json +++ b/vue2-in-vue3/package.json @@ -8,9 +8,9 @@ "build": "pnpm --filter vue2-in-vue3_vue* build", "serve": "pnpm --filter vue2-in-vue3_vue* --parallel serve", "clean": "pnpm --filter vue2-in-vue3_vue* --parallel clean", - "test:e2e": "pnpm exec playwright test", - "test:e2e:ui": "pnpm exec playwright test --ui", - "e2e:ci": "pnpm exec playwright test --reporter=line" + "test:e2e": "node scripts/run-playwright.cjs test", + "test:e2e:ui": "node scripts/run-playwright.cjs test --ui", + "e2e:ci": "node scripts/run-playwright.cjs test --reporter=line" }, "devDependencies": { "@playwright/test": "^1.54.2", diff --git a/vue2-in-vue3/scripts/register-playwright-alias.cjs b/vue2-in-vue3/scripts/register-playwright-alias.cjs new file mode 100644 index 0000000000..4eca138d8c --- /dev/null +++ b/vue2-in-vue3/scripts/register-playwright-alias.cjs @@ -0,0 +1,30 @@ +const path = require('node:path'); +const { createRequire } = require('node:module'); + +const requireFromHere = createRequire(__filename); +const repoRoot = path.resolve(__dirname, '..', '..'); + +function aliasModule(request) { + let localPath; + try { + localPath = requireFromHere.resolve(request); + } catch { + return; + } + + // Ensure the module is loaded so the cache entry exists. + requireFromHere(request); + + try { + const rootPath = requireFromHere.resolve(request, { paths: [repoRoot] }); + if (rootPath !== localPath && require.cache[localPath]) { + require.cache[rootPath] = require.cache[localPath]; + } + } catch { + // The root dependency might not exist when running this example in + // isolation. That's fine; in that case nothing extra is needed. + } +} + +aliasModule('@playwright/test'); +aliasModule('playwright'); diff --git a/vue2-in-vue3/scripts/run-playwright.cjs b/vue2-in-vue3/scripts/run-playwright.cjs new file mode 100755 index 0000000000..6994d37015 --- /dev/null +++ b/vue2-in-vue3/scripts/run-playwright.cjs @@ -0,0 +1,17 @@ +#!/usr/bin/env node +const { spawn } = require('node:child_process'); +const path = require('node:path'); + +const cli = require.resolve('@playwright/test/cli'); +const aliasHook = path.resolve(__dirname, 'register-playwright-alias.cjs'); +const args = process.argv.slice(2); + +const child = spawn(process.execPath, ['--require', aliasHook, cli, ...args], { + stdio: 'inherit', +}); + +child.on('exit', code => { + if (code !== null) { + process.exit(code); + } +});