saveinmed/frontend/playwright.config.ts

80 lines
2.4 KiB
TypeScript

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,
},
})