浏览 AI 知识库

AI 写的测试为什么会假通过,怎样检查断言有没有用

测试显示绿色,不一定真的验证了行为。检查断言对象、失败分支和故障注入,才能发现只调用不判断、先 mock 成功再证明成功的假测试。

先认准故障

测试名写着“应拒绝”,代码却从来没有检查拒绝结果

测试名写“should reject invalid email”,实现却只调用函数,没有断言;另一个测试先 mock 返回成功,再断言页面显示成功。全部绿灯只是因为从未验证失败。

  • 测试曾在预期错误实现上失败
  • 关键输出和副作用均有断言
  • mock 没有替代被测逻辑
按现象分支

测试假通过怎么检查,先从“只断言状态或非空”这一类现象查起

只断言状态或非空

原因
断言过弱,错误内容仍满足条件。
怎么改
检查关键字段、业务不变量和副作用;用错误值验证断言真的区分。

Mock 了被测逻辑本身

原因
测试只验证自己配置的返回值。
怎么改
只替代真正外部边界,核心业务使用真实实现和可控输入。

异步任务没有等待

原因
测试在断言前结束,或异常未传播。
怎么改
等待实际完成条件,检查失败分支和未处理 Promise,避免固定 sleep。

选择器或用例没有执行

原因
测试被跳过、筛选错误或浏览器定位到错误元素。
怎么改
检查测试数量、跳过状态和定位唯一性;故意改页面文案确认用例失败。
本例材料

复测前,固定原始现象、环境和目标

需要确认本例内容
现有材料注册函数、三个现有测试和可注入验证器;目标行为是无效邮箱抛出特定错误且不调用保存。
不能越过的边界先让测试在错误实现上失败;断言输出与副作用;不要断言 mock 自己配置的结果。
要交付的结果失败注入结果与有效断言清单
实际代码现场

这个测试永远为真,折扣算错也会通过

假通过

断言只检查结果存在

it('applies a 10% discount', () => {
  const total = calculateTotal([{ price: 100, quantity: 2 }], 0.10);
  expect(total).toBeTruthy();
});
有效断言

检查金额、输入不变和边界行为

it('subtracts 10% without mutating items', () => {
  const items = [{ price: 100, quantity: 2 }];
  expect(calculateTotal(items, 0.10)).toBe(180);
  expect(items).toEqual([{ price: 100, quantity: 2 }]);
});

it('rejects a discount above 100%', () => {
  expect(() => calculateTotal([{ price: 100, quantity: 1 }], 1.2))
    .toThrow('discount must be between 0 and 1');
});

示例使用教学函数。真实测试的精确值、舍入规则和异常契约必须来自当前业务要求。

失败注入

故意把减法改成加法,测试必须红一次

操作预期实际判定
临时把 total * (1 - discount) 改为 total * (1 + discount)金额断言失败:expected 180, received 220若仍通过,断言没有保护核心规则
恢复正确实现全部相关测试通过证明红绿变化来自这一处行为
查看测试清单本文件 3 个用例均执行,0 skipped排除用例未运行造成的假绿
单独运行与全套运行两种方式结果一致排除共享状态和顺序依赖
修复前后

测试假通过怎么检查:按原条件复测的结果

Before

原始现象

删除邮箱校验后测试仍全绿,说明测试没有保护目标行为。

After

失败注入结果与有效断言清单

加入失败注入:暂时移除校验时测试红;恢复后断言错误码、保存调用为 0、错误提示可见。突变检查再把条件反转,测试同样失败,证明断言真正命中。

AI 介入点

让 AI 审查测试是否真的会失败

把实现、测试和真实业务规则一起给AI,重点找假断言和漏测边界。

可复制使用

让 AI 审查测试是否真的会失败

请检查现有测试是否真的能发现【业务行为】的回归。不要通过改实现让测试变绿。

实现文件【】;测试文件【】;业务规则及反例【】;测试命令和实际输出【】。

逐个测试说明它失败时能捕获什么错误。重点找没有断言、只验证 mock 被调用、断言固定常量、关键分支未进入或错误值也会通过的用例。提出一个最小反例/变异来证明测试会失败,并给补充测试草案。没有实际运行的部分标“建议未验证”;不得删失败测试或宣称测试通过。

使用范围:把实现、测试和真实业务规则一起给AI,重点找假断言和漏测边界。不为了通过测试修改业务行为,不删除失败用例,不声称未运行的测试已通过。

验收方式

失败注入结果与有效断言清单通过哪些检查才算完成

进一步核对

调试与测试:参考资料与核对入口