Files
haiyushuke-website/e2e/smoke.spec.ts

101 lines
4.0 KiB
TypeScript
Raw Normal View History

2026-06-16 14:34:09 +08:00
import { test, expect } from "@playwright/test";
test.describe("站点冒烟", () => {
test("首页可访问且无致命前端错误", async ({ page }) => {
const pageErrors: string[] = [];
page.on("pageerror", (err) => {
pageErrors.push(err.message);
});
const response = await page.goto("/", { waitUntil: "networkidle" });
expect(response?.ok()).toBeTruthy();
await expect(page.locator("main")).toBeVisible();
await expect(page).toHaveTitle(/海宇数科/);
await expect(page.getByRole("heading", { level: 1 })).toContainText(
/智能报告/,
);
await expect(page.locator("#reports")).toBeVisible();
await expect(page.getByText("KYB 企业核验")).toBeVisible();
const exampleBtn = page
.locator("#reports")
.getByRole("button", { name: "查看智能体报告示例" })
.first();
await exampleBtn.scrollIntoViewIfNeeded();
await exampleBtn.click();
await expect(page.getByRole("dialog")).toBeVisible();
await expect(page.getByRole("dialog")).toContainText("核验结论");
await expect(page.locator("#models")).toBeVisible();
const squareLink = page.getByRole("link", { name: "模型广场" }).first();
await squareLink.click();
await expect(page).toHaveURL(/\/models$/);
await expect(page.getByRole("heading", { level: 1 })).toContainText(
"模型广场",
);
await expect(page.getByText("minimax-m2.7-highspeed")).toBeVisible();
await expect(page.getByText("glm-5.1")).toBeVisible();
await page.goto("/news", { waitUntil: "domcontentloaded" });
await expect(page.getByRole("heading", { level: 1 })).toContainText(
"AI 新闻资讯",
);
await page
.getByRole("link", { name: "智能报告模板库 2.0 发布" })
.first()
.click();
await expect(page).toHaveURL(/\/news\/report-templates-2/);
await expect(page.getByRole("heading", { level: 1 })).toContainText(
"智能报告模板库 2.0 发布",
);
expect(
pageErrors,
pageErrors.length ? pageErrors.join("\n") : undefined,
).toEqual([]);
});
test("窄屏显示移动菜单并可展开导航", async ({ page }) => {
await page.setViewportSize({ width: 390, height: 844 });
await page.goto("/", { waitUntil: "domcontentloaded" });
await expect(page.getByRole("button", { name: "菜单" })).toBeVisible();
await page.getByRole("button", { name: "菜单" }).click();
await expect(page.getByRole("link", { name: "智能报告" }).first()).toBeVisible();
await page.getByRole("link", { name: "模型能力" }).first().click();
await expect(page).toHaveURL(/\/models\/?$/);
});
test("文档中心可访问并展示侧栏与示例正文", async ({ page }) => {
const response = await page.goto("/docs", {
waitUntil: "domcontentloaded",
});
expect(response?.ok()).toBeTruthy();
await expect(page).toHaveTitle(/文档中心/);
await expect(
page.getByRole("region", { name: "文档导航" }),
).toBeVisible();
await expect(
page.getByRole("navigation", { name: "面包屑" }),
).toContainText("文档中心");
await expect(
page.getByRole("complementary", { name: "文档目录" }).or(
page.getByRole("navigation", { name: "文档目录(移动端)" }),
),
).toBeVisible({ timeout: 15_000 });
await expect(page.getByRole("link", { name: "快速开始" }).first()).toBeVisible();
await page.getByRole("link", { name: "OpenAI" }).first().click();
await expect(page).toHaveURL(/\/docs\/models\/openai/);
await expect(page.locator(".docs-prose h1, .docs-prose h2").first()).toContainText(
"OpenAI",
);
await expect(page.getByText("chat/completions")).toBeVisible();
});
test("全局样式编译通过(无 Turbopack CSS 报错页)", async ({ page }) => {
await page.goto("/", { waitUntil: "domcontentloaded" });
const bodyText = await page.locator("body").innerText();
expect(bodyText).not.toContain("Cannot apply unknown utility class");
expect(bodyText).not.toContain("CssSyntaxError");
});
});