【发布时间】:2012-11-05 14:46:55
【问题描述】:
从源(database_cleaner,active_record)来看,看起来应该同样快。但是有人声称使用 database_cleaner 的事务策略会减慢控制器和模型规范 (for example)。我手头没有用于基准测试的大型测试套件。有人有任何见解或比较过两者吗?
【问题讨论】:
标签: ruby-on-rails ruby rspec benchmarking rspec-rails
从源(database_cleaner,active_record)来看,看起来应该同样快。但是有人声称使用 database_cleaner 的事务策略会减慢控制器和模型规范 (for example)。我手头没有用于基准测试的大型测试套件。有人有任何见解或比较过两者吗?
【问题讨论】:
标签: ruby-on-rails ruby rspec benchmarking rspec-rails
我花了一点时间在一个广泛使用 ActiveRecord 固定装置的中型代码库上比较了两者。当我将它切换为使用 DatabaseCleaner 而不是 use_transactional_fixtures 时,模型规范开始花费大约两倍的时间。
在进行与您相同的比较后,我意识到use_transactional_fixtures 控制了两件事:
use_transactional_fixtures为真时,夹具数据在第一次测试之前加载一次DatabaseCleaner 的事务策略可以替代(1)。但缺点是您的套件会重复加载相同的夹具数据。
因此,如果您不使用 AR 夹具(或仅使用一对),use_transactional_fixtures 和 DatabaseCleaner 的事务策略将具有相似的性能。但是如果你使用很多 AR 设备,关闭 use_transactional_fixtures 会对性能产生很大影响。
【讨论】:
fixtures :all 和use_transactional_fixtures = true,所有的fixture 都会在每次测试之前加载。