From f0b3f4ed5aee27704b070ffd8fd5eadf2c319660 Mon Sep 17 00:00:00 2001 From: ddcat666 <26564566+ddcat666@users.noreply.github.com> Date: Thu, 8 Oct 2026 14:12:35 +0800 Subject: [PATCH] =?UTF-8?q?test(web):=20=E8=B4=A8=E9=87=8F=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=20-=20=E5=90=8C=E6=AD=A5=E9=A2=84=E6=BC=94=E5=8F=B0?= =?UTF-8?q?=E4=B8=8E=E8=AE=BF=E5=AE=A2=E8=B7=AF=E7=94=B1=E5=9B=9E=E5=BD=92?= =?UTF-8?q?=E6=96=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../director-template-mode-wiring.test.ts | 26 +++++++++++-------- web/test/workspace-route-loading.test.ts | 7 +++-- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/web/test/director-template-mode-wiring.test.ts b/web/test/director-template-mode-wiring.test.ts index 40e2244ff..84fa71cbe 100644 --- a/web/test/director-template-mode-wiring.test.ts +++ b/web/test/director-template-mode-wiring.test.ts @@ -84,7 +84,9 @@ describe("模式接线", () => { }); test("时间轴只在 capabilities.timeline 为真时渲染", () => { - expect(workbench).toContain("{capabilities.timeline ? { @@ -151,12 +153,11 @@ describe("模式接线", () => { expect(workbench).not.toContain("keyframes: [{ id: nanoid(), time: 0, transform: start }"); }); - test("小屏把属性检查器放到下方而不是隐藏,姿态与骨骼入口仍可达", () => { - // 窄屏下检查器改为可开合的侧滑面板,dock 提供开关入口,而不是直接隐藏。 + test("小屏通过 dock 开合属性检查器,姿态与骨骼入口仍可达", () => { const workbenchCss = readFileSync(resolve(import.meta.dir, "../src/components/canvas/previs/canvas-previs-workbench.css"), "utf8"); expect(workbench).toContain('className={`pv-panel pv-panel--right thin-scrollbar ${inspectorOpen ? "is-open" : ""}`}'); - expect(workbench).toContain("onToggleInspector={() => compactLayout ? setInspectorOpen((value) => !value) : setInspectorDocked((value) => !value)}"); - expect(workbenchCss).toContain(".pv-panel--right.is-open { transform: translateX(0); }"); + expect(workbench).toMatch(/onToggleInspector=\{\(\) =>\s*\(?\s*compactLayout\s*\?\s*setInspectorOpen\(\(value\) => !value\)\s*:\s*setInspectorDocked\(\(value\) => !value\)\s*\)?\s*\}/); + expect(workbenchCss).toMatch(/\.pv-panel--right\.is-open\s*\{\s*transform:\s*translateX\(0\);\s*\}/); expect(workbench).not.toContain("border-l max-lg:hidden"); }); @@ -178,12 +179,15 @@ describe("模式接线", () => { }); test("draft/history/save 的生命周期 effect 一律不依赖 mode", () => { - // 逐个锁住依赖数组:任一处混入 mode,切模式就会掉草稿或掉历史。 - expect(workbench).toContain("}, [message, modal, open, scene, writeDraft]);"); - expect(workbench).toContain("}, [mirrorDraft, stagedTransaction]);"); - expect(workbench).toContain("}, [mirrorDraft]);"); - // 快捷键监听只随 open 装卸,不随 mode 反复重挂。 - expect(workbench).toContain("}, [open]);"); + const recovery = slice(workbench, "// 打开会话时检查合法本地恢复候选", "const activeShot ="); + const pageHide = slice(workbench, "// 离开页面:", "// 卸载兜底:"); + const unmount = slice(workbench, "// 卸载兜底:", "const undo ="); + const shortcuts = slice(workbench, "// 预演台是全屏浮层", "/** 对象 transform 编辑的唯一入口"); + // 锁住各自的依赖数组,同时允许格式器换行和尾逗号。 + expect(recovery).toMatch(/\},\s*\[message,\s*modal,\s*open,\s*scene,\s*writeDraft\],?\s*\);/); + expect(pageHide).toMatch(/\},\s*\[mirrorDraft,\s*stagedTransaction\],?\s*\);/); + expect(unmount).toMatch(/\},\s*\[mirrorDraft\],?\s*\);/); + expect(shortcuts).toMatch(/\},\s*\[open\],?\s*\);/); }); }); diff --git a/web/test/workspace-route-loading.test.ts b/web/test/workspace-route-loading.test.ts index 1745b7011..8d1bfbe18 100644 --- a/web/test/workspace-route-loading.test.ts +++ b/web/test/workspace-route-loading.test.ts @@ -35,8 +35,11 @@ describe("workspace route loading", () => { const router = source("../src/router.tsx"); const navigation = source("../src/components/layout/workspace-sidebar-nav.tsx"); - expect(router).toContain('{ path: "/", element: {deferred()} }'); - expect(router).toContain('{ path: "/create", element: {deferred()} }'); + expect(router).toContain('{ path: "/", element: deferred() }'); + expect(router).toContain('{ path: "/create", element: deferred() }'); + expect(router).toContain(""); + expect(router).toContain('{ path: "/assets", element: {deferred()} }'); + expect(router).toContain('{ path: "/canvas/:id", element: }'); expect(router).not.toContain('path: "/home"'); expect(router).not.toContain("HomePage"); expect(navigation).toContain('{ ...toolItem("create", "/"), id: "home", title: "创作" }');