用途:这是一条测试编写原则,适用于编写、修改或保留测试时。核心要求是像用户那样调用代码,并对观察到的结果断言一个字面期望值;断言代码调用了哪些函数、或复述代码中的常量,都不算测试行为。
检查方法:保留一个测试前先问,若它导入的每个函数都返回 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 文件中的编译期检查可以保留。
限制:资料未提供该原则的安装方式、平台支持、收费或价格信息。