Archived
fix(w05): Task 7b 评审 fix round 2 —— 6 条 DOM 测试是空的,bodyOf/addRow 加 export 后补真测试
复审用变异逮到:把 ViewContainer.tsx:305 的 tr:last-of-type 换成明摆着错的 tr:first-of-type 重跑 view-render-addrow-thead.test.ts 新增的 6 条,6/6 全绿零反应。根因:那 6 条只 import 了 一份手抄的选择器复刻(findAddRowTarget),与真实实现之间没有任何绑定,ViewContainer.tsx 换掉 选择器它不会跟着变 —— 全仓当时没有任何测试真的执行过 bodyOf/addRow,对这两个函数的未来回归 零防护。 「不能 export/import」这条前提是错的:packages-are-leaves 只禁 packages→apps,没有任何规则 禁 apps→packages;bodyOf/addRow 只是没加 export——加 export 是零行为改动。本轮第三次踩同一条 (Task 4 读数函数、Task 6 let 镜像,现在是选择器):禁令属实,但抄多了,能 import 的都该 import。 ①ViewContainer.tsx:165/303 给 bodyOf/addRow 加 export,函数体一字未改。 ②新增 packages/ui-kit/__tests__/view-container-addrow.test.ts(5 条),照 view-container- collect.test.ts 的写法直接 import 真实函数,合成最小 fixture(不碰任何活动 HTML)。写的时候 自己踩过两处:addRow 的 appendChild 把新行接到 <table> 下面不是插回原 tbody/thead(断言要查 内容不能查落点);tr:last-of-type 与 tr:first-of-type 在单行行组里永远等价(补一组两行的 动态 tbody + data-marker 才让两个选择器真正分道扬镳)。变异验证:选择器换错后 1/5 真红 (row-2 变 row-1),复原验绿。 ③两处测试的头注写清各守各的:新测试守机制(addRow/bodyOf 面对通用形状的真实行为),原 6 条 守 W05 这两张表此刻的具体 renderView() 输出形状是对的(选择器仍是镜像,但选择器本身的正确性 已交给新测试)——头注同时改正了此前「不能 import 是 depcruise 拦着」的错误说法,真实原因是 ViewContainer.tsx 含 JSX、需要 tsconfig.web.json 的 jsx 选项,apps/api 只受 tsconfig.node.json 管,类型系统这一关过不去。 pnpm gates 退出码 0(2422 passed | 34 skipped);E04/I01 包内测试 92/92、55/55 全绿,零回归。 报告同批刷新了上一轮贴错版本的失败输出证据(用当前最终代码重新跑过变异)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
@@ -162,7 +162,7 @@ function replaceInPlace(doc: Document, html: string): void {
|
||||
}
|
||||
|
||||
/** 一张可改的表的容器(tbody)—— 按 `data-edit` 地址找 */
|
||||
function bodyOf(doc: Document, address: string): HTMLElement | null {
|
||||
export function bodyOf(doc: Document, address: string): HTMLElement | null {
|
||||
return doc.querySelector<HTMLElement>(`[data-edit="${CSS.escape(address)}"]`);
|
||||
}
|
||||
|
||||
@@ -300,7 +300,7 @@ export function dropRow(row: HTMLElement): 'removed' | 'marked' | 'unmarked' {
|
||||
* 一张空表(一行都没有)加不了行 —— 没有可照的样子;那种情形本来也不该由人开头
|
||||
* (行由活动写下,人改的是它写错的地方)。
|
||||
*/
|
||||
function addRow(doc: Document, address: string): boolean {
|
||||
export function addRow(doc: Document, address: string): boolean {
|
||||
const host = bodyOf(doc, address);
|
||||
const last = host?.querySelector<HTMLElement>('tr:last-of-type');
|
||||
if (host === null || last == null) return false;
|
||||
|
||||
Reference in New Issue
Block a user