文件
tennis-training-hub/tests/e2e/app.spec.ts
2026-03-14 21:45:31 +08:00

63 行
2.4 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { installAppMocks } from "./helpers/mockApp";
test("login redirects into dashboard with mocked auth", async ({ page }) => {
await installAppMocks(page, { authenticated: false });
await page.goto("/login");
await expect(page.getByTestId("login-title")).toBeVisible();
await page.getByTestId("login-username-input").fill("TestPlayer");
await page.getByTestId("login-submit-button").click();
await expect(page).toHaveURL(/\/dashboard$/);
await expect(page.getByTestId("dashboard-title")).toContainText("TestPlayer");
});
test("training page shows plan generation flow", async ({ page }) => {
await installAppMocks(page, { authenticated: true });
await page.goto("/training");
await expect(page.getByTestId("training-title")).toBeVisible();
await expect(page.getByTestId("training-generate-button")).toBeVisible();
});
test("videos page renders video library items", async ({ page }) => {
await installAppMocks(page, { authenticated: true });
await page.goto("/videos");
await expect(page.getByTestId("videos-title")).toBeVisible();
await expect(page.getByTestId("video-card")).toHaveCount(1);
});
test("live camera page exposes camera startup controls", async ({ page }) => {
await installAppMocks(page, { authenticated: true });
await page.goto("/live-camera");
await expect(page.getByTestId("live-camera-start-button")).toBeVisible();
});
test("recorder flow archives a session and exposes it in videos", async ({ page }) => {
await installAppMocks(page, { authenticated: true, videos: [] });
await page.setViewportSize({ width: 390, height: 844 });
await page.goto("/recorder");
await expect(page.getByTestId("recorder-title")).toBeVisible();
await page.getByTestId("recorder-start-camera-button").click();
await expect(page.getByTestId("recorder-start-recording-button")).toBeVisible();
await page.getByTestId("recorder-start-recording-button").click();
await expect(page.getByTestId("recorder-marker-button")).toBeVisible();
await page.getByTestId("recorder-marker-button").click();
await expect(page.getByText("手动标记")).toBeVisible();
await page.getByTestId("recorder-finish-button").click();
await expect(page.getByTestId("recorder-reset-button")).toBeVisible({ timeout: 8_000 });
await page.goto("/videos");
await expect(page.getByTestId("video-card")).toHaveCount(1);
await expect(page.getByText("E2E 录制")).toBeVisible();
});