SuperAPI AI 工具集

principle-test-behavior-not-implementation

测试与质量

查看项目

更新于 10-15 22:12

技能介绍

用途:这是一条测试编写原则,适用于编写、修改或保留测试时。核心要求是像用户那样调用代码,并对观察到的结果断言一个字面期望值;断言代码做了哪些调用、或复述代码中的常量,都不算测试行为。

判断方法:保留一个测试前先问,如果它导入的每个函数都返回 undefined,这个测试是否仍会通过。若是,则它没有观察任何行为,无法因缺陷而失败,应重写断言或删除该测试。

五种在导入函数全部返回 undefined 时仍会通过的形态:弱断言或无断言(无 expect,或仅 toBeDefined、toBeTruthy、not.toThrow、toBeInstanceOf、toBeGreaterThan(0));仅验证 mock 或缺失(仅 toHaveBeenCalled、not.toHaveBeenCalled、toBeUndefined、toEqual([])、toHaveLength(0)、not.toBe(wrongValue));自引用(期望值来自被测代码,如 expect(f(a)).toBe(f(a)));常量钉死(断言复述手工维护的常量、配置默认值、表格行或提示词字符串);夹具断言夹具(断言读取测试自建数据或 beforeEach 中计算的值,主体从未在测试体内运行)。

修复方式:在测试体内用一个具体输入调用被测对象,断言字面输出或可观察效果,例如 expect(slugify("Hello, World!")).toBe("hello-world")。验证缺失时,在同一测试中对另一输入断言其存在。对常量,改为用一个输入测试读取它的机制,而非复述该值。对 mock,断言它收到的载荷或调用后的状态,而非它被调用过。若不存在此类断言,删除该测试。

保留项:跨表格行的关系测试(如某键存在于两张表、父项存在),以及 *.test-d.ts 文件中的编译期检查。

限制:资料未提供该原则的适用语言、框架或工具链信息。