Task 24 audit run hit the 10-minute test.setTimeout ceiling after capturing 2 of 4 viewport passes (iphone-se complete, iphone-16 complete-ish, 16-pro partial, pro-max not started). 4 viewports × ~45 routes × slowMo: 200 needs more headroom than 600s gave. 30min is comfortable headroom; the per-test project timeout is matched. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
101 lines
2.9 KiB
TypeScript
101 lines
2.9 KiB
TypeScript
import { defineConfig, devices } from '@playwright/test';
|
||
|
||
export default defineConfig({
|
||
testDir: './tests/e2e',
|
||
fullyParallel: false,
|
||
forbidOnly: !!process.env.CI,
|
||
retries: 0,
|
||
workers: 1, // Sequential — so tests can build on each other
|
||
reporter: [['list'], ['html', { open: 'never' }]],
|
||
timeout: 60_000,
|
||
expect: { timeout: 10_000 },
|
||
|
||
use: {
|
||
baseURL: 'http://localhost:3000',
|
||
trace: 'on-first-retry',
|
||
screenshot: 'only-on-failure',
|
||
video: 'retain-on-failure',
|
||
actionTimeout: 15_000,
|
||
navigationTimeout: 30_000,
|
||
},
|
||
|
||
projects: [
|
||
{
|
||
name: 'setup',
|
||
testMatch: /smoke\/global-setup\.ts/,
|
||
},
|
||
{
|
||
name: 'smoke',
|
||
testMatch: /smoke\/\d{2}-.*\.spec\.ts/,
|
||
dependencies: ['setup'],
|
||
use: {
|
||
...devices['Desktop Chrome'],
|
||
viewport: { width: 1440, height: 900 },
|
||
},
|
||
},
|
||
{
|
||
name: 'exhaustive',
|
||
testMatch: /exhaustive\/.*\.spec\.ts/,
|
||
dependencies: ['setup'],
|
||
use: {
|
||
...devices['Desktop Chrome'],
|
||
viewport: { width: 1440, height: 900 },
|
||
},
|
||
},
|
||
{
|
||
name: 'destructive',
|
||
testMatch: /destructive\/.*\.spec\.ts/,
|
||
dependencies: ['setup'],
|
||
use: {
|
||
...devices['Desktop Chrome'],
|
||
viewport: { width: 1440, height: 900 },
|
||
},
|
||
},
|
||
{
|
||
// Real-API tests hit live external services (Documenso, IMAP, etc.).
|
||
// Opt-in only: pnpm exec playwright test --project=realapi
|
||
name: 'realapi',
|
||
testMatch: /realapi\/.*\.spec\.ts/,
|
||
dependencies: ['setup'],
|
||
timeout: 120_000,
|
||
use: {
|
||
...devices['Desktop Chrome'],
|
||
viewport: { width: 1440, height: 900 },
|
||
},
|
||
},
|
||
{
|
||
// Visual regression baselines. Regenerate with --update-snapshots after
|
||
// intentional UI changes; otherwise pnpm exec playwright test --project=visual
|
||
// diffs against the committed PNGs.
|
||
name: 'visual',
|
||
testMatch: /visual\/.*\.spec\.ts/,
|
||
dependencies: ['setup'],
|
||
use: {
|
||
...devices['Desktop Chrome'],
|
||
viewport: { width: 1440, height: 900 },
|
||
},
|
||
},
|
||
{
|
||
// Mobile / tablet audit — visits every page in headed Chromium at iPhone
|
||
// viewports (portrait), screenshots full-page to .audit/mobile/<viewport>/,
|
||
// and writes an index.md. Depends on `setup` for seeded admin + port-role.
|
||
name: 'mobile-audit',
|
||
testMatch: /audit\/mobile\.spec\.ts/,
|
||
dependencies: ['setup'],
|
||
// Single test walks 4 viewports × ~45 routes sequentially with slowMo;
|
||
// 30 min headroom keeps us well under the wall-clock cost.
|
||
timeout: 1_800_000,
|
||
use: {
|
||
headless: false,
|
||
launchOptions: { slowMo: 200 },
|
||
screenshot: 'off',
|
||
video: 'off',
|
||
trace: 'off',
|
||
},
|
||
},
|
||
],
|
||
|
||
// Don't start the dev server — we expect it to already be running
|
||
webServer: undefined,
|
||
});
|