From de9b0cd5d06564fa9be36339702d8d02577162b6 Mon Sep 17 00:00:00 2001 From: Zhi Date: Fri, 13 Mar 2026 01:19:27 +0000 Subject: [PATCH] add playwright test setup --- Dockerfile | 9 +++++++++ package.json | 11 +++++++++++ playwright.config.ts | 25 +++++++++++++++++++++++++ tests/example.spec.ts | 6 ++++++ 4 files changed, 51 insertions(+) create mode 100644 Dockerfile create mode 100644 package.json create mode 100644 playwright.config.ts create mode 100644 tests/example.spec.ts diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..db36c2f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM node:20-bookworm-slim +ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 + +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +EXPOSE 3000 +CMD ["npm", "run", "dev"] diff --git a/package.json b/package.json new file mode 100644 index 0000000..da274b8 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "harborforge-frontend-test", + "version": "1.0.0", + "scripts": { + "test": "playwright test", + "test:headed": "playwright test --headed" + }, + "devDependencies": { + "@playwright/test": "^1.40.0" + } +} diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..a91a323 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,25 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './tests', + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: 'html', + use: { + baseURL: 'http://127.0.0.1:3000', + trace: 'on-first-retry', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + webServer: { + command: 'npm run dev', + url: 'http://127.0.0.1:3000', + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/tests/example.spec.ts b/tests/example.spec.ts new file mode 100644 index 0000000..3de1248 --- /dev/null +++ b/tests/example.spec.ts @@ -0,0 +1,6 @@ +import { test, expect } from '@playwright/test'; + +test('has title', async ({ page }) => { + await page.goto('/'); + await expect(page).toHaveTitle(/HarborForge/); +});