4

我使用 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。

4

0 回答 0