Ruby1.9.3とRails3.2.1でアプリを開発しています。
最近、私たちのユニットテストは最初は遅くなっています。呼び出しと実行が行われるまでに最大15秒かかります。「Executetest:units」が表示されたら、出力が表示されるまでさらに10秒かかります。最後に、タスクが完了し、テストが実行されるのに3秒しかかかりません。
単体テストの場合は3秒が許容されます。25秒のロード時間は、BDD/TDDでは現実的ではありません。
これが私がで走ったときに何が起こるかrake test:units --trace
です:
** Invoke test:units (first_time)
** Invoke test:prepare (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:test:load_schema (first_time)
** Invoke db:test:purge
** Execute db:test:load_schema
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:prepare
** Execute test:units
ロードされてから再ロードされるデータベーススキーマが、速度低下の主な原因である可能性があることは間違いありません。Rakefile
ただし、単体テストに関連することは何もしていません。内部で実際に何が起こっているのかをどこで確認できますか?
これは上部にあるものですtest/test_helper.rb
:
require 'simplecov'
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
私が試したこと:
- コメントアウトし
simplecov
ます。これはCIサーバーにのみ使用し、開発中は使用しません(実行時間に違いはありません)。 - 他のものをコメントアウトしましたが、それはテストの実行さえも壊しました。Rails環境は「テスト」で自動的にロードされると思っていたので、なぜこれらの他のアイテムがそこにあるのか完全にはわかりません。
どこで/どのように頭を突くことができるかについてのアイデアはありますか?
Railsが単なる移行ではなく移行を実行している可能性はありますschema:load
か?開発を進めるにつれ、多数の移行(〜30)が発生します。
編集:
私は8GRAMとCorei7を搭載した2011年モデルのMacbookProを使用しています-それが私のマシンだとは思わないでください。この質問で、Windowsでは問題が発生する可能性があることがわかりrequire
ました。
また、フィクスチャが問題になる可能性があると考えましたが、フィクスチャが問題である場合、テストへのロード時間ではなく、テスト自体が遅くなりますよね?
編集2:
pchap10kの答えのおかげで、それはrakeとは何の関係もないと思います-それは私たちのことGemfile
です。多分私はその地域で検索する必要があります...