我使用 ActiveRecord Fixtures 来定义测试的预设数据。
我使用 database_cleaner gem 在测试之间重置数据库。我遵循Avdi Grimm 描述的方法,将截断用于 javascript 测试,但将事务用于非 javascript 测试。
大多数关于 database_cleaner 的建议都告诉您 set config.use_transactional_fixtures = false
,而不讨论其含义。这意味着当 AR 创建 Fixture 数据时,它不会启动事务。这个想法是,如果您使用该:transaction
策略,database_cleaner 将处理启动事务。
问题是 ActiveRecord在您有机会调用之前DatabaseCleaner.start
创建了 Fixture 数据。这意味着夹具数据不是事务的一部分,因此当 database_cleaner 回滚事务时,夹具数据仍然存在,从而污染了可能不期望夹具数据的后续测试。
如何让 ActiveRecord 在 database_cleaner 事务的上下文中创建 Fixture 数据?
我正在使用 Rails 4.1.0rc1、rspec-rails 2.14.2、rspec 2.14.1、database_cleaner 1.2.0。