发现并运行整个仓库的测试,按统一规则判定结果,可按分片并行;CI 的「全树测试」矩阵作业逐片调用本工具。
用法
在仓库根目录运行(需先有 yy豫构.wasm 与其旁的 yy4_bs.wasm):
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 构建 全树测试 --输出 yy全树测试.wasm -j 24
node 豫言操作系统/宿主/节点/宿主.cjs yy全树测试.wasm # 运行全部
node 豫言操作系统/宿主/节点/宿主.cjs yy全树测试.wasm --列出 # 只列出将运行的测试
node 豫言操作系统/宿主/节点/宿主.cjs yy全树测试.wasm --分片 3/16 # 运行第 3 片(共 16 片)
node 豫言操作系统/宿主/节点/宿主.cjs yy全树测试.wasm --只 库/标准库/ # 只运行路径以此开头的测试
--分片 与 --只 都可再加 --列出。有意外失败时退出码为 1,否则为 0。
测试的种类与判定
测试清单来自 git ls-files,忽略 _v0 目录:
- 单元测试(
X。测试。豫):用node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 文件 <路径> --输出 …构建后运行。退出码非零,或输出里出现非零的“当前失败数:N”(单元测试库每次断言都会打印),即判为失败。 - 只检查:规则表里标为
只检查的单元测试(云工宿主、浏览器宿主须在对应宿主里运行)只做类型检查,即node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 文件 <路径> -- --type-check-only。 - 黄金样例(
名-N。豫配名。成功或名。失败):同组里没被其他文件以“名-N之书”导入的每一份,以及名-1,各自作为独立用例:
- 。成功:必须构建、运行成功;标记文件非空时,去掉首尾空白后的标准输出须与它相同。
- 。失败:构建或运行必须失败;标记文件非空时,输出须包含它的文字。
- JS 测试(
.test.mjs、.test.cjs、。测试.mjs、。测试.cjs、.e2e.mjs):node --test --test-timeout=180000 <路径>。 - 测试页(
。测试页.html)暂不自动运行,报告为跳过。
每个测试的运行时限为 3 分钟:有 timeout 命令时以它强制,并按用时判定超时;构建不限时。构建产物放在 dist/全树测试/,运行后即删除。
规则表
测试规则.tsv 每行三栏,以制表符分隔:类别、路径、说明。路径以 / 结尾时按前缀匹配。空行和以 # 开头的行忽略。类别有:
跳过:不运行,说明写原因(如需要云仓、miniflare、QEMU)。只检查:单元测试只做类型检查。参数:运行单元测试时追加的参数,以空格分隔(相对仓库根目录)。已知失败:已登记的失败。失败时报告为“已知失败”,不使 CI 失败;若已通过则报告“意外通过”,提醒把它移出规则表。
分片
--分片 序/总 按路径顺序把测试切成连续的若干段,同一片内的测试多属同一包,可以共用编译缓存;各片合起来不重不漏。
维护
新增测试无需登记,会被自动发现;只有需要跳过、只检查、附加参数或暂列已知失败时才改规则表。修改判定规则时同步更新本说明与文言版。