test(studio): content/market/account 读旅程 rendered-UI 活体 e2e(3/3 绿)
live-read.spec.ts:MSW off 直连活体单体,chromium 验作品列表/市场浏览/个人中心均渲染真实后端数据, 证 client.ts tenant-id 修复后 studio 可跨 BC 直取活体数据、真实数据形态与渲染契约对齐。 前端 in-UI 覆盖:content(列表读+采纳写)/ai/market(浏览读)/account(个人中心读)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
73355b69fa
commit
6d3eeed068
@ -116,7 +116,8 @@
|
||||
### C. 前端 muse-studio(B3,体量最大,最长的长板)
|
||||
- 现状:其余旅程仍 ~14% 真连、dev 默认 MSW;但 MVP#1 已打通"关 MSW→直连活体→playwright e2e"模式(见下),可复用到后续旅程。
|
||||
- ✅ **AI 候选采纳(rendered UI 活体证,2026-06-14)**:`main.tsx` 加 `VITE_API_MOCK=false` 开关关 MSW、前端直连活体单体;`accept-suggestion.spec.ts` 在 chromium 实跑——**happy-path**(生成经 page.route stub 发真实 suggestionId→点"采纳替换"→真合并)隔离跑绿 + DB 证(block rev1→2、正文=候选);**negative-path**(陈旧 revision)绿(乐观锁 1041000002)。连带**真实修复 client.ts 注入 tenant-id**(活体集成缺口,dev MSW 不校验故没暴露)。**遗留**:happy-path 受种子状态依赖(合并后 block rev 变 + RQ 缓存,需 fresh 种子复跑);MSW-on/off 测试需拆 project(`workspace.spec.ts` 依赖 MSW、与 MSW-off 互斥);suggestion 合并后留 pending(疑 Shadow 不可变之 by-design,待确认)。
|
||||
- ⬜ 知识库工作台:drafts/confirm/bindings/publish/graph(2/3 面缺)。
|
||||
- ✅ **content/market/account 读旅程(rendered UI 活体证,2026-06-14)**:`live-read.spec.ts` 3/3 绿(MSW off,chromium:作品列表/市场浏览/个人中心均渲染真实后端数据)——证 tenant-id 修复后 studio 直连活体单体跨 BC 取数、真实数据形态与页面渲染契约对齐。
|
||||
- ⬜ 知识库工作台:drafts/confirm/bindings/publish/graph(2/3 面缺,需建 UI)。
|
||||
- ⬜ 市场生产侧:发布/上架/申诉 UI(全缺,创作者飞轮断裂)。
|
||||
- ⬜ 个人中心:21/33 端无 UI(security-events/exports/downloads/licenses/purchases/new-api-binding)。
|
||||
- 收口口径:每切片"关 MSW→真连活体单体→playwright e2e 绿"才算完成(反假绿)。
|
||||
|
||||
39
muse-studio/e2e/live-read.spec.ts
Normal file
39
muse-studio/e2e/live-read.spec.ts
Normal file
@ -0,0 +1,39 @@
|
||||
import { expect, test, type Page } from '@playwright/test';
|
||||
|
||||
/**
|
||||
* 活体只读旅程 e2e(真实后端,MSW off)。
|
||||
*
|
||||
* 前置:vite 以 VITE_API_MOCK=false 运行(关 MSW)、真实 muse-server 在 48080、muse_slice_live 已种子。
|
||||
* 目的:验证 rendered studio 经「client.ts 注入 tenant-id 修复」后的 HTTP 客户端,能直连活体单体并把
|
||||
* content(作品列表)/market(资产浏览)/account(个人中心)三个 BC 的真实后端数据在 UI 正确渲染
|
||||
* ——即真实数据形态与页面渲染契约对齐(MSW mock 形态之外的活体校验)。
|
||||
*/
|
||||
const TOKEN = 'test1';
|
||||
|
||||
async function seedToken(page: Page): Promise<void> {
|
||||
await page.addInitScript((t) => {
|
||||
window.localStorage.setItem('accessToken', t);
|
||||
window.localStorage.setItem('tenantId', '1');
|
||||
}, TOKEN);
|
||||
}
|
||||
|
||||
test.describe('活体只读旅程(真实后端,MSW off)', () => {
|
||||
test('作品列表渲染真实作品(content)', async ({ page }) => {
|
||||
await seedToken(page);
|
||||
await page.goto('/');
|
||||
// .first():种子库存在多个同名作品(多次播种),strict 模式需唯一匹配;能渲染即证真实后端作品列表已加载。
|
||||
await expect(page.getByText('活体验证样书').first()).toBeVisible({ timeout: 15_000 });
|
||||
});
|
||||
|
||||
test('市场浏览渲染真实资产(market)', async ({ page }) => {
|
||||
await seedToken(page);
|
||||
await page.goto('/market');
|
||||
await expect(page.getByText('活体市场资产·测试')).toBeVisible({ timeout: 15_000 });
|
||||
});
|
||||
|
||||
test('个人中心渲染真实账户(account)', async ({ page }) => {
|
||||
await seedToken(page);
|
||||
await page.goto('/account');
|
||||
await expect(page.getByText('活体用户')).toBeVisible({ timeout: 15_000 });
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user