← 中文资源

简体中文版本

验证数据库事务回滚

用真实数据库断言多步写入失败后不留下部分状态。

阅读英文原文

目标

某操作后期失败却留下部分写入,产生不一致记录并破坏对账。本配方在真实或容器化数据库上运行多步写入并在第二步注入失败,断言操作抛错(未提交),随后断言两个账户余额都未改变,证明原子回滚;提醒用 Mock 仓储无法证明事务语义,并让每个测试在回滚事务中运行。

步骤要点

  1. 在第二步注入失败并断言操作抛错。
  2. 断言所有相关账户余额均未改变。
  3. 用真实数据库引擎而非 Mock 仓储。
  4. 让每个测试在回滚事务中运行以避免脏数据。
await expect(service.transfer({ from: 'a', to: 'b', amount: 10, failAfter: 1 })).rejects.toThrow();

排错提示

  • 测试库数据残留需用回滚事务隔离。
  • Mock 会掩盖事务缺陷。
  • 不覆盖跨服务分布式事务。

适用边界

  • 需要真实数据库环境。
  • 不覆盖分布式事务。