目标
某操作后期失败却留下部分写入,产生不一致记录并破坏对账。本配方在真实或容器化数据库上运行多步写入并在第二步注入失败,断言操作抛错(未提交),随后断言两个账户余额都未改变,证明原子回滚;提醒用 Mock 仓储无法证明事务语义,并让每个测试在回滚事务中运行。
步骤要点
- 在第二步注入失败并断言操作抛错。
- 断言所有相关账户余额均未改变。
- 用真实数据库引擎而非 Mock 仓储。
- 让每个测试在回滚事务中运行以避免脏数据。
await expect(service.transfer({ from: 'a', to: 'b', amount: 10, failAfter: 1 })).rejects.toThrow();
排错提示
- 测试库数据残留需用回滚事务隔离。
- Mock 会掩盖事务缺陷。
- 不覆盖跨服务分布式事务。
适用边界
- 需要真实数据库环境。
- 不覆盖分布式事务。