:transaction
我们在带有 MySQL 5.x 数据库的 Rails 3.0.4 应用程序(目前无法升级)上使用带有 clean 方法的 db_cleaner 。我们不能使用:truncation
,因为我们会丢失种子数据。
现在我们面临以下问题。例如,ActiveRecord 在基于 ActiveRecord 的对象上调用:create
或调用时会自动生成事务。:destroy
在我们的 RSpec 套件中,我们使用机械师工厂为每个测试创建测试数据。现在,如果我们正在测试创建它自己的事务的功能,我们面临的问题是,我们Factory.make!
在测试中调用的开始提交周期不仅退出了内部事务(由打开:create
),而且退出了内部打开的事务测试的代码。结果 db_cleaner 触发的回滚无法回滚任何东西,并且在测试运行后我们的数据库中仍然有我们的测试数据。
我想一定有人已经面临这个问题了。由于 MySQL 不支持嵌套事务,但 ActiveRecord 从 2.3.2 版本开始通过创建保存点来模拟它们,我们没有预料到这种行为。
谁能提供信息,如何解决该特定问题?