2

私たちの仕様スイートを実行することになると、私自身と私のチームに多くの頭痛の種を引き起こしている興味深い問題があります。

仕様スイートは次のサブフォルダーに分割されており、その横には完了までの合計実行時間があります。

rspec spec/acceptance    311.67s
rspec spec/controllers   18.97s
rspec spec/decorators    4.39s
rspec spec/helpers       9.45s
rspec spec/lib           16.88s
rspec spec/mailers       5.27s
rspec spec/models        121.05s
rspec spec/presenters    0.03s
rspec spec/workers       19.3s

Total run time: 8m 27s

これは確かに改善される可能性がありますが、全体としてはかなり扱いやすいです.

ただし、rspec specスイート全体を一度に実行して実行すると、完了するまでの合計時間は27m 11s!

したがって、明らかに、私たちが行っていることは、一度に実行したときにスイート全体のパフォーマンスに劇的な影響を与えています. この問題のトラブルシューティングをどこから開始できるかについて、いくつかの指針が得られることを願っています。

それが役立つ場合は、ここspec_helper.rbにファイルを投稿しました

前もって感謝します、

ジョー

4

2 に答える 2

1

推測では、あなたの統合仕様は に設定DatabaseCleanerされており、他の仕様のため:truncationに元に戻されていないと思います. ここに状況をナビゲート:transactionするサンプルがあります。いつでもどの戦略が使用されているかを掘り下げて把握するのに役立ついくつかの方法も提供されています. ここにあなたの便宜のためにあります:spec_helper

def cleaner_strategy
  active_record_cleaner.instance_variable_get(:@strategy).class
end

def active_record_cleaner
  DatabaseCleaner.instance_variable_get(:@cleaners)[[:active_record, {}]]
end

補足: 統合仕様は非常に遅いため、フィルタを使用しています。ローカル環境でデフォルトで無効にしてから、CI に実行させます。

config.filter_run_excluding :slow unless ENV['SLOW']

次に、次の方法で個別に実行できます。

$ SLOW=true rspec spec/features/some_awesome_feature_spec.rb
于 2014-10-06T02:15:33.953 に答える