← 中文资源

简体中文版本

类型安全的表驱动测试用例

定义带名称与类型的测试用例,检查名称重复后对执行器运行,并返回通过数量与失败详情。

阅读英文原文

功能说明

表驱动测试把输入、期望和用例名集中定义,减少重复代码。该工具提供类型安全的 defineCases 与 runCases:前者检查名称唯一,后者执行函数并收集通过数与失败详情。它适合纯函数、解析器和校验器的单元测试,也可以作为测试框架之外的小型断言工具。

关键代码

defineCases 校验非空数组、每个用例有名称且不重复。runCases 使用 Object.is 作为默认比较器,遍历用例执行 execute,比较实际与期望;不一致时记录名称、实际值和期望值。execute 抛错会直接传播,不会被误记为断言失败。

for (const testCase of cases) {
  const actual = execute(testCase.input);
  if (equals(actual, testCase.expected)) passed += 1;
  else failures.push({ name: testCase.name, actual, expected: testCase.expected });
}
return { passed, failures };

使用注意

默认 Object.is 对对象和数组按引用比较,结构化结果应传入自定义 equals。execute 不应依赖用例顺序或共享可变状态。该工具不替代测试框架,只负责组织数据与汇总结果,不会生成测试报告。重复名称会抛 RangeError,空用例数组也会抛错。

验证方式

断言两个通过用例返回 passed 2 且 failures 为空。一个失败用例记录名称、实际值与期望值。重复名称抛 RangeError,空用例数组抛 RangeError。自定义比较器可以正确比较对象。execute 抛错时应向上传播,而不是被吞掉。