9

ソース ( database_cleaneractive_record ) から判断すると、それらは同等に高速であるように見えます。しかし、database_cleaner のトランザクション戦略を使用すると、コントローラーとモデルの仕様が遅くなるという主張があります (たとえば)。ベンチマーク用の大規模なテスト スイートは手元にありません。誰かが洞察を持っているか、2つを比較しましたか?

4

1 に答える 1

11

ActiveRecord フィクスチャを多用する中規模のコードベースで 2 つを比較するのに少し時間を費やしました。の代わりに DatabaseCleaner を使用するように切り替えたところuse_transactional_fixtures、モデルのスペックに約 2 倍の時間がかかり始めました。

あなたが行ったのと同じ比較を行った後、私は制御するものが2つあることに気付きましたuse_transactional_fixtures:

  1. 各仕様がトランザクションにラップされているかどうか
  2. フィクスチャ データが ActiveRecord によってロードされるプロセスの場所
    • が true の場合use_transactional_fixtures、フィクスチャ データは最初のテストの前に 1 回読み込まれます
    • false の場合、フィクスチャ データは各スペックの前にロードされます。

DatabaseCleaner のトランザクション戦略は (1) の代わりになります。ただし、欠点は、スイートが同じフィクスチャ データを繰り返しロードすることです。

したがって、AR フィクスチャを使用しない場合 (または 2 つだけ使用する場合)、use_transactional_fixturesDatabaseCleaner のトランザクション戦略は同様のパフォーマンスを発揮します。ただし、多くの AR フィクスチャを使用する場合、use_transactional_fixturesオフにするとパフォーマンスに大きな影響があります。

于 2014-01-06T18:09:32.103 に答える