From 7a928b5df94982d82ebc7e39451bc2d4bf66386b Mon Sep 17 00:00:00 2001 From: kris Date: Tue, 31 Mar 2026 01:07:17 +0800 Subject: [PATCH] test: guard workbench action coverage --- CHANGELOG.md | 3 ++- web/storyforge-web-v4/tests/workbench-pages.test.mjs | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3b72ad..7073efb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ - `找对标 / 跟踪账号` 里一批已经失效的 “当前平台待接入” 按钮禁用与入口分支已删除,当前 active 平台都直接走真实路由,失败时再给真实反馈。 - 工作台前端已经清掉浏览器 `alert` 弹窗,缺对象、权限不足、刷新失败和加载失败都会回到站内反馈,不再把用户从当前流程里打断出去。 - `OneLiner 会话 / 主 Agent 运行 / 动作执行器 / 跟踪同步 / 高分分析 / 平台技能验收` 这批真接口也已经去掉“当前实例未提供”的旧降级口径,统一按 live 结果说话。 +- 新增一条前端回归护栏:静态声明出来的 `data-action` 必须有明确处理逻辑,避免后续再出现“点了没反应,最后落到动作待接入”的隐性缺口。 ### NAS 联调与回归 @@ -40,7 +41,7 @@ - Web: `http://192.168.31.188:19192/` - Collector: `http://192.168.31.188:19193/healthz` - 当前基线通过: - - 前端测试 `62/62` + - 前端测试 `63/63` - `bash scripts/check_repo_baseline.sh` - `bash scripts/smoke_fnos_storyforge_lan.sh` diff --git a/web/storyforge-web-v4/tests/workbench-pages.test.mjs b/web/storyforge-web-v4/tests/workbench-pages.test.mjs index fc88c55..63210fe 100644 --- a/web/storyforge-web-v4/tests/workbench-pages.test.mjs +++ b/web/storyforge-web-v4/tests/workbench-pages.test.mjs @@ -797,3 +797,11 @@ test("live-first workbench flows no longer advertise stale missing-capability pl assert.doesNotMatch(APP, /当前实例还没有开放平台技能验收接口/); assert.doesNotMatch(APP, /当前实例未提供/); }); + +test("declared static workbench actions are wired into explicit handlers", () => { + const declared = new Set([...APP.matchAll(/data-action="([a-zA-Z0-9_-]+)"/g)].map((match) => match[1])); + const clickHandled = new Set([...APP.matchAll(/if \(name === "([a-zA-Z0-9_-]+)"\)/g)].map((match) => match[1])); + const knownNonClick = new Set(["submit-auth", "submit-oneliner", "submit-sheet", "close-sheet", "close-auth", "close-oneliner", "discovery-query", "refresh-data"]); + const missing = [...declared].filter((name) => !clickHandled.has(name) && !knownNonClick.has(name)).sort(); + assert.deepEqual(missing, []); +});