补齐企微历史验收模拟接口隔离(09-06-release-gate-integrity / 09-17-company-loan-principal-repayment)

N3 第三轮候选 98bab397:浏览器 371 通过、1 失败;报销付款与 PWA 升级通过。
桌面企微历史测试整页导航后等待标题超时,快照退回登录页。
确认默认桌面 context 漏掉已有的 Service Worker 隔离;原运行没有请求来源证据,历史唯一根因未证实。
补文件级隔离,验证原导航实际获得该 fixture 的 refresh/profile 响应:200、非 Worker、requestId 对应。
原三项用例、登录/会话、桌面只读、手机布局及截图保持。受管定向 3 项通过,无失败/跳过/重试,环境和清理通过。
应用、资金规则、迁移、门禁范围、预算和全局并发未改。前三轮失败回执保留。
第四轮完整候选结果以新回执为准;独立代码复核及真实还款待验。
仅本地提交,不推送、不部署,不访问生产或真实 OCR。
这个提交包含在:
2026-10-09 09:22:10 +08:00
父节点 98bab39798
当前提交 8e17e8dfa1
共修改 6 个文件,包含 52 行新增和 1 行删除
+12 -1
查看文件
@@ -2,6 +2,8 @@ import { mkdirSync, mkdtempSync } from "node:fs";
import path from "node:path";
import { expect, test, type Browser, type Page, type Route } from "@playwright/test";
test.use({ serviceWorkers: "block" });
const visualRoot = path.resolve(process.env.QA_VISUAL_OUTPUT_DIR?.trim() || path.join(process.cwd(), "../output/playwright"));
mkdirSync(visualRoot, { recursive: true });
const SCREENSHOT_DIR = mkdtempSync(path.join(visualRoot, "internal-readiness-ui-"));
@@ -397,7 +399,16 @@ test.describe("五人团队本地候选移动证据", () => {
await mockApis(page, state);
await login(page);
await page.setViewportSize({ width: 1024, height: 768 });
await page.goto("/wecom-approval-archive");
const [refreshResponse, meResponse] = await Promise.all([
page.waitForResponse((response) => new URL(response.url()).pathname === "/api/auth/refresh"),
page.waitForResponse((response) => new URL(response.url()).pathname === "/api/me"),
page.goto("/wecom-approval-archive"),
]);
for (const response of [refreshResponse, meResponse]) {
expect(response.status()).toBe(200);
expect(response.fromServiceWorker()).toBe(false);
expect((await response.json()).requestId).toBe("mock-internal-readiness-ui");
}
await expect(page).toHaveURL(/\/wecom-approval-archive$/);
await expect(page.getByRole("heading", { level: 1, name: "企微审批历史" })).toBeVisible();
await expect(page.getByRole("button", { name: "查看历史" })).toBeVisible();