feat(09-03): configure Playwright for E2E testing

- Set testDir to './tests/e2e' for E2E tests
- Configure single worker for database safety
- Add desktop and mobile viewports (Desktop Chrome, Pixel 5)
- Enable screenshots on failure, disable video
- Add webServer to auto-build and preview app
- Create separate docker config for deployment tests
This commit is contained in:
Thomas Richter
2026-02-03 23:33:12 +01:00
parent 623811908b
commit 3664afb028
3 changed files with 47 additions and 11 deletions

View File

@@ -19,7 +19,7 @@
"test:unit:watch": "vitest", "test:unit:watch": "vitest",
"test:coverage": "vitest run --coverage", "test:coverage": "vitest run --coverage",
"test:e2e": "playwright test", "test:e2e": "playwright test",
"test:e2e:docker": "BASE_URL=http://localhost:3000 playwright test tests/docker-deployment.spec.ts" "test:e2e:docker": "BASE_URL=http://localhost:3000 playwright test --config=playwright.docker.config.ts"
}, },
"devDependencies": { "devDependencies": {
"@playwright/test": "^1.58.1", "@playwright/test": "^1.58.1",

View File

@@ -1,20 +1,31 @@
import { defineConfig } from '@playwright/test'; import { defineConfig, devices } from '@playwright/test';
export default defineConfig({ export default defineConfig({
testDir: './tests', testDir: './tests/e2e',
fullyParallel: true, fullyParallel: false, // Shared database - avoid race conditions
forbidOnly: !!process.env.CI, forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0, retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined, workers: 1, // Single worker for database safety
reporter: 'html', reporter: [['html', { open: 'never' }], ['github']],
use: { use: {
baseURL: process.env.BASE_URL || 'http://localhost:3000', baseURL: process.env.BASE_URL || 'http://localhost:4173',
trace: 'on-first-retry' trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'off'
}, },
projects: [ projects: [
{ {
name: 'chromium', name: 'chromium-desktop',
use: { browserName: 'chromium' } use: { ...devices['Desktop Chrome'] }
},
{
name: 'chromium-mobile',
use: { ...devices['Pixel 5'] }
} }
] ],
webServer: {
command: 'npm run build && npm run preview',
port: 4173,
reuseExistingServer: !process.env.CI
}
}); });

View File

@@ -0,0 +1,25 @@
import { defineConfig, devices } from '@playwright/test';
/**
* Playwright config for Docker deployment tests
* These tests run against the Docker container, not the dev server
*/
export default defineConfig({
testDir: './tests',
testMatch: 'docker-deployment.spec.ts',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: 'html',
use: {
baseURL: process.env.BASE_URL || 'http://localhost:3000',
trace: 'on-first-retry'
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] }
}
]
});