如何使用ActiveRecord 3.0.4和db cleaner处理嵌套事务

时间:2012-11-07 16:44:47

标签: ruby-on-rails activerecord transactions

我们正在使用MySQL 5.x数据库在Rails 3.0.4应用程序(我们目前无法升级)上使用db_cleaner和干净方法:transaction。我们无法使用:truncation,因为我们会丢失种子数据。

现在我们面临以下问题。当在基于ActiveRecord的对象上调用:create:destroy时,ActiveRecord会自动生成事务。在我们的RSpec套件中,我们使用Machinist工厂为每个测试创建测试数据。现在我们正在测试创建它自己的事务的功能,我们面临的问题是,我们在测试中Factory.make!调用的开始 - 提交周期不仅退出内部事务(由:create打开)但也退出在测试代码中打开的事务。结果,db_cleaner触发的回滚无法回滚任何内容,测试运行后我们的数据库中仍然存在测试数据。

我认为有人必须已经面对这个问题。由于MySQL不支持嵌套事务,但ActiveRecord通过从版本2.3.2开始创建保存点来模拟它们,我们没有想到这种行为。

任何人都可以提供信息,如何解决这个特定问题?

0 个答案:

没有答案