从来源(database_cleaner,active_record)来看,它们看起来应该同样快。但有人声称使用database_cleaner的事务策略会降低控制器和模型规范(for example)的速度。我没有一个大型测试套件可用于基准测试。任何人有任何见解或比较两者?
答案 0 :(得分:10)
我花了一点时间比较两个中型代码库,它们大量使用ActiveRecord灯具。当我将其切换为使用DatabaseCleaner而不是use_transactional_fixtures
时,模型规格开始花费大约两倍的时间。
在进行了相同的比较之后,我意识到use_transactional_fixtures
控制了两件事:
use_transactional_fixtures
为真时,夹具数据在第一次测试之前加载一次DatabaseCleaner的交易策略可以替代(1)。但缺点是你的套件会重复加载相同的灯具数据。
因此,如果您不使用AR灯具(或仅使用一对),use_transactional_fixtures
和DatabaseCleaner的交易策略将具有类似的性能。但如果您使用大量AR灯具,关闭use_transactional_fixtures
会对性能产生重大影响。