80 lines
2.4 KiB
TypeScript
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,
|
|
},
|
|
})
|