import path from "path"; import { defineConfig, devices } from "@playwright/test"; // Use process.env.PORT by default and fallback to port 3000 const PORT = process.env.PORT || 3000; // Set webServer.url and use.baseURL with the location of the WebServer respecting the correct set port const baseURL = `http://localhost:${PORT}`; // Reference: https://playwright.dev/docs/test-configuration export default defineConfig({ // Timeout per test timeout: 60 * 1000, // Test directory testDir: path.join(__dirname, "tests"), // Artifacts folder where screenshots, videos, and traces are stored. outputDir: "test-results/", fullyParallel: true, retries: process.env.CI ? 2 : 0, workers: process.env.CI ? 1 : undefined, reporter: "html", // Run your local dev server before starting the tests: // https://playwright.dev/docs/test-advanced#launching-a-development-web-server-during-the-tests webServer: { command: "npm run dev", url: baseURL, timeout: 120 * 1000, reuseExistingServer: !process.env.CI, }, use: { actionTimeout: 0, // Use baseURL so to make navigations relative. // More information: https://playwright.dev/docs/api/class-testoptions#test-options-base-url baseURL, // Retry a test if its failing with enabled tracing. This allows you to analyze the DOM, console logs, network traffic etc. // More information: https://playwright.dev/docs/trace-viewer trace: "retry-with-trace", // All available context options: https://playwright.dev/docs/api/class-browser#browser-new-context // contextOptions: { // ignoreHTTPSErrors: true, // }, }, projects: [ { name: "Desktop Chrome", use: { ...devices["Desktop Chrome"], }, }, { name: "Desktop Firefox", use: { ...devices["Desktop Firefox"], }, }, { name: "Desktop Safari", use: { ...devices["Desktop Safari"], }, }, // Test against mobile viewports. { name: "Mobile Chrome", use: { ...devices["Pixel 5"], }, }, { name: "Mobile Safari", use: devices["iPhone 12"], }, ], });