用途:这是一条测试编写原则,适用于编写、修改或保留测试时。核心要求是像使用者那样调用代码,并对观察到的结果断言一个字面期望值;断言代码做了哪些调用、或复述代码中的常量,都不算测试行为。
判断方法:保留一个测试前,先问如果它导入的每个函数都返回 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));四、常量钉死,断言复述手工维护的常量、配置默认值、表格行或提示词字符串,如 expect(LIMITS.maxTools).toBe(8);五、夹具断言夹具,断言读取测试自己构造的数据或 beforeEach 中计算的值,被测对象从未在测试体内运行。
修复方式:在测试体内用一个具体输入调用被测对象,断言字面输出或可观察效果,如 expect(slugify("Hello, World!")).toBe("hello-world")。要断言缺失,就在同一测试中用另一个输入断言其存在;对常量,改为用一个输入测试读取它的机制,而非复述该值;对 mock,断言它收到的载荷或调用后的状态,而非它被调用过。若不存在这样的断言,删除该测试。
保留项:跨表格行的关系测试(如某键同时存在于两张表、父项存在)以及 *.test-d.ts 文件中的编译期检查可以保留。
限制:资料未提供该原则的适用语言、框架或工具链信息,也未提供安装命令或代码示例之外的实现细节。