test(criteria): 抽出共享 check/finish(marker 不再靠记性)+ 失败信息自带修法
pi 的三条增量,前两条落地: 1. **错误信息自带修法**:受众不只是读过规范的人 —— 并发写 WebUI 的 agent 新加判据时不会打开 CRITERIA.md,看到红的第一反应可能是"套件坏了"。所以把可照抄的修法写进那条错误本身 (共享 helper 的用法 + 样板文件路径),并说明 node:test 的判据不用管。 **red 是 ta 一定会看到的,文档不一定被打开。** 2. **marker 由共享 helper 打印**:新增 test/lib/checks.mjs(导出 check/finish), 计数只可能在该模块内发生 → "漏打 marker"与"计数写错位置"这两类在新文件上不可能发生。 为避免"写了没人用"(本仓踩过的坑),同时把两个手工计数的判据改用它: narrow-layout(原来只有 failed 计数)与 markdown-xss(原来根本没有计数器)—— 条数不变(52 / 9),套件仍全绿。 未回改其余 10 个文件:run-all 的 marker 检查已经覆盖它们。
This commit is contained in:
@ -176,9 +176,28 @@ for (const [file, flags, expected] of SUITE) {
|
||||
const nodeTest = /^# pass (\d+)/m.exec(out);
|
||||
const ran = marker ? Number(marker[1]) : (nodeTest ? Number(nodeTest[1]) : null);
|
||||
if (ran === null) {
|
||||
reds.push(`${file}(没找到自报条数 —— 判据要打 RESULT pass=N 或走 node:test 的 # pass N)`);
|
||||
/*
|
||||
* 报错**自带修法**(pi 2026-09-14):这条契约的受众不只是读过规范的人 ——
|
||||
* 并发写 WebUI 的 agent 新加判据时不会打开 CRITERIA.md,看到红的第一反应
|
||||
* 很可能是"套件坏了"(删自检、往清单里塞豁免)。**red 是 ta 一定会看到的东西,
|
||||
* 文档不一定会被打开** —— 所以把修法直接写进这条错误里,并给出可抄的样板。
|
||||
*/
|
||||
reds.push(`${file}
|
||||
↳ 没找到自报条数。修法(二选一):
|
||||
1) 用共享 helper(新判据推荐):
|
||||
import { check, finish } from './lib/checks.mjs';
|
||||
check('判据名', 条件, '失败时给人看的细节');
|
||||
finish('标签'); // 它负责打 RESULT pass=N fail=M
|
||||
样板:test/markdown-xss.test.mjs、test/narrow-layout.test.mjs
|
||||
2) 自己打一行(老写法,计数必须写在 check() 内部,否则"实现被换空"看不见):
|
||||
console.log(\`RESULT pass=\${pass} fail=\${fail}\`);
|
||||
样板:test/theme.test.mjs、test/background.test.mjs
|
||||
(用 node:test 写的判据不用管:runner 认 \`# pass N\`。)`);
|
||||
} else if (expected > 0 && ran < expected) {
|
||||
reds.push(`${file}(自报 ${ran} 条 < 登记的 ${expected} 条 —— 条数掉了:判据被删/被跳过/check 实现被改坏?)`);
|
||||
reds.push(`${file}
|
||||
↳ 自报 ${ran} 条 < 清单里登记的 ${expected} 条。常见成因:判据被删/被跳过(写在 process.exit() 之后、
|
||||
条件里提前 return)、check() 的实现被改坏(合并冲突)、marker 打在了汇总之前但计数没接上。
|
||||
确认确实该减少条数时,把清单里那个数字一起改掉(那是一次显式、可复核的编辑)。`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user