import { defineConfig, devices } from '@playwright/test' /** * playwright.config.ts — Configuração dos testes End-to-End * * Uso: * pnpm e2e → roda todos os testes e2e (headless) * pnpm e2e:ui → abre o Playwright UI para debug interativo * pnpm e2e:headed → roda com browser visível (útil em desenvolvimento) * * Em CI/CD (GitHub Actions, etc.): * pnpm e2e → headless automático * * Pré-requisito: backend e frontend devem estar rodando. * make dev-backend & * make dev-frontend & * pnpm e2e * * Ou use o target make test-e2e que sobe tudo automaticamente. */ export default defineConfig({ testDir: './e2e', testMatch: '**/*.spec.ts', // Timeout por teste (30s é razoável para fluxos de UI) timeout: 30_000, // Retries em CI para lidar com flakiness de rede retries: process.env.CI ? 2 : 0, // Workers paralelos — reduzir para 1 em CI se houver race conditions workers: process.env.CI ? 1 : undefined, // Reporter: no CI usa GitHub Actions reporter; localmente usa HTML interativo reporter: process.env.CI ? [['github'], ['html', { open: 'never' }]] : [['html', { open: 'on-failure' }], ['list']], use: { // URL base do frontend em desenvolvimento baseURL: process.env.E2E_BASE_URL || 'http://localhost:5173', // Capturar screenshot apenas em falhas screenshot: 'only-on-failure', // Capturar vídeo apenas em falhas (útil para debug) video: 'retain-on-failure', // Trace em CI para análise post-mortem trace: process.env.CI ? 'on-first-retry' : 'off', // Viewport padrão — desktop viewport: { width: 1280, height: 720 }, }, projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'] }, }, { name: 'firefox', use: { ...devices['Desktop Firefox'] }, }, // Mobile (opcional — descomente para testar responsividade) // { // name: 'mobile-chrome', // use: { ...devices['Pixel 5'] }, // }, ], // Sobe o servidor de desenvolvimento automaticamente antes dos testes. // Remova ou ajuste se preferir subir manualmente. webServer: { command: 'pnpm dev', url: 'http://localhost:5173', reuseExistingServer: !process.env.CI, timeout: 60_000, }, })