67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import { dirname, join } from 'node:path'
|
|
import { fileURLToPath } from 'node:url'
|
|
import { defineConfig, devices } from '@playwright/test'
|
|
|
|
const frontendRoot = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
const baseURL = process.env.E2E_BASE_URL ?? 'http://localhost:5190'
|
|
const backendPort = Number(process.env.E2E_BACKEND_PORT ?? 3010)
|
|
const frontendPort = Number(process.env.E2E_FRONTEND_PORT ?? 5190)
|
|
|
|
export default defineConfig({
|
|
testDir: '.',
|
|
testMatch: '**/*.spec.ts',
|
|
timeout: 120_000,
|
|
fullyParallel: false,
|
|
forbidOnly: Boolean(process.env.CI),
|
|
retries: process.env.CI ? 1 : 0,
|
|
workers: 1,
|
|
reporter: [['list'], ['html', { open: 'never', outputFolder: 'playwright-report' }]],
|
|
globalTeardown: './global-teardown.ts',
|
|
use: {
|
|
baseURL,
|
|
trace: 'retain-on-failure',
|
|
screenshot: 'only-on-failure',
|
|
video: 'off',
|
|
locale: 'fa-IR',
|
|
},
|
|
projects: [
|
|
{
|
|
name: 'mobile',
|
|
use: {
|
|
...devices['Pixel 7'],
|
|
...(process.env.PLAYWRIGHT_CHROME_CHANNEL ? { channel: process.env.PLAYWRIGHT_CHROME_CHANNEL as 'chrome' } : {}),
|
|
},
|
|
},
|
|
{
|
|
name: 'desktop',
|
|
use: {
|
|
...devices['Desktop Chrome'],
|
|
viewport: { width: 1280, height: 800 },
|
|
...(process.env.PLAYWRIGHT_CHROME_CHANNEL ? { channel: process.env.PLAYWRIGHT_CHROME_CHANNEL as 'chrome' } : {}),
|
|
},
|
|
},
|
|
],
|
|
webServer: [
|
|
{
|
|
command: 'node scripts/e2e-backend.mjs',
|
|
cwd: frontendRoot,
|
|
url: `http://127.0.0.1:${backendPort}/health`,
|
|
timeout: 120_000,
|
|
reuseExistingServer: false,
|
|
},
|
|
{
|
|
command: `npx vite --port ${frontendPort} --strictPort`,
|
|
cwd: frontendRoot,
|
|
port: frontendPort,
|
|
timeout: 120_000,
|
|
reuseExistingServer: false,
|
|
env: {
|
|
...process.env,
|
|
VITE_DEV_PORT: String(frontendPort),
|
|
VITE_DEV_API_TARGET: `http://127.0.0.1:${backendPort}`,
|
|
VITE_E2E: '1',
|
|
},
|
|
},
|
|
],
|
|
})
|