ソース ( database_cleaner、active_record ) から判断すると、それらは同等に高速であるように見えます。しかし、database_cleaner のトランザクション戦略を使用すると、コントローラーとモデルの仕様が遅くなるという主張があります (たとえば)。ベンチマーク用の大規模なテスト スイートは手元にありません。誰かが洞察を持っているか、2つを比較しましたか?
質問する
2341 次
1 に答える
11
ActiveRecord フィクスチャを多用する中規模のコードベースで 2 つを比較するのに少し時間を費やしました。の代わりに DatabaseCleaner を使用するように切り替えたところuse_transactional_fixtures
、モデルのスペックに約 2 倍の時間がかかり始めました。
あなたが行ったのと同じ比較を行った後、私は制御するものが2つあることに気付きましたuse_transactional_fixtures
:
- 各仕様がトランザクションにラップされているかどうか
- フィクスチャ データが ActiveRecord によってロードされるプロセスの場所
- が true の場合
use_transactional_fixtures
、フィクスチャ データは最初のテストの前に 1 回読み込まれます - false の場合、フィクスチャ データは各スペックの前にロードされます。
- が true の場合
DatabaseCleaner のトランザクション戦略は (1) の代わりになります。ただし、欠点は、スイートが同じフィクスチャ データを繰り返しロードすることです。
したがって、AR フィクスチャを使用しない場合 (または 2 つだけ使用する場合)、use_transactional_fixtures
DatabaseCleaner のトランザクション戦略は同様のパフォーマンスを発揮します。ただし、多くの AR フィクスチャを使用する場合、use_transactional_fixtures
オフにするとパフォーマンスに大きな影響があります。
于 2014-01-06T18:09:32.103 に答える