import { createRequire } from "node:module"; import { defineConfig, devices } from "@playwright/test"; const require = createRequire(import.meta.url); const { shouldIncludeWebKit } = require("../scripts/playwrightHostDeps.cjs") as { shouldIncludeWebKit: () => boolean; }; const configuredWorkers = process.env.PLAYWRIGHT_WORKERS ? Number.parseInt(process.env.PLAYWRIGHT_WORKERS, 10) : undefined; const port = Number.parseInt(process.env.PORT ?? "5173", 10); const defaultBaseUrl = `http://127.0.0.1:${port}`; const baseURL = process.env.BASE_URL ?? defaultBaseUrl; const reuseExistingServer = !process.env.CI && !process.env.PORT; const usePreviewServer = process.env.CI === "true" || process.env.PLAYWRIGHT_USE_PREVIEW === "true"; const chromiumExecutablePath = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH; /** * Read environment variables from file. * https://github.com/motdotla/dotenv */ // import dotenv from 'dotenv'; // import path from 'path'; // dotenv.config({ path: path.resolve(__dirname, '.env') }); /** * See https://playwright.dev/docs/test-configuration. */ export default defineConfig({ testDir: "./tests", timeout: 60 * 1000, expect: { timeout: 15000, }, /* Run tests in files in parallel */ fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, /* Retry on CI only */ retries: process.env.CI ? 2 : 0, /* Opt out of parallel tests on CI. */ workers: configuredWorkers ?? (process.env.CI ? 1 : undefined), /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: [["html", { open: "never" }], ["list"]], /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { /* Base URL to use in actions like `await page.goto('/')`. */ baseURL, /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: "retain-on-failure", locale: "ko-KR", }, /* Configure projects for major browsers */ projects: [ { name: "chromium", use: { ...devices["Desktop Chrome"], launchOptions: chromiumExecutablePath ? { executablePath: chromiumExecutablePath } : undefined, }, }, { name: "firefox", use: { ...devices["Desktop Firefox"] }, }, ...(shouldIncludeWebKit() ? [ { name: "webkit", use: { ...devices["Desktop Safari"] }, }, ] : []), ], /* Run your local dev server before starting the tests */ webServer: process.env.BASE_URL ? undefined : { command: usePreviewServer ? `pnpm exec vite preview --host 127.0.0.1 --port ${port} --strictPort` : `pnpm exec vite --host 127.0.0.1 --port ${port} --strictPort`, url: `http://127.0.0.1:${port}`, reuseExistingServer, timeout: 180 * 1000, }, });