从源(database_cleaner,active_record)来看,它们似乎应该同样快。但有人声称使用 database_cleaner 的事务策略会减慢控制器和模型规范(例如)。我手头没有用于基准测试的大型测试套件。有人有任何见解或比较过两者吗?
问问题
2341 次
1 回答
11
我花了一点时间在一个广泛使用 ActiveRecord 固定装置的中型代码库上比较两者。当我将其切换为使用 DatabaseCleaner 而不是 时use_transactional_fixtures
,模型规范开始花费大约两倍的时间。
在进行与您相同的比较之后,我意识到有两件事可以use_transactional_fixtures
控制:
- 每个规范是否包含在事务中
- ActiveRecord 在此过程中加载夹具数据的位置
- 为 true时
use_transactional_fixtures
,在第一次测试之前加载一次夹具数据 - 如果为 false,则在每个规范之前加载夹具数据
- 为 true时
DatabaseCleaner 的事务策略可以替代(1)。但缺点是您的套件会重复加载相同的夹具数据。
因此,如果您不使用 AR 夹具(或仅使用一对),use_transactional_fixtures
DatabaseCleaner 的事务策略将具有相似的性能。但是如果你使用大量的 AR 灯具,use_transactional_fixtures
关闭会产生很大的性能影响。
于 2014-01-06T18:09:32.103 回答