2008-09-15 48 views
43

Railsアプリケーションのrspecテストを実行するときは、実際にテストを実行する前に、永久に1日かかることになります。なぜrspecは遅いのですか? Railsの初期ロードを高速化する方法や、必要なRailsアプリケーションの一部(ActiveRecordのものなど)をいくつかテストするためにすべてがロードされないようにする方法はありますか?RSpecがRailsで遅いのはなぜですか?

答えて

22

別の端末ウィンドウでscript/spec_serverを実行し、次に-Xパラメータをスペックコールに追加することで、script/specコールをスピードアップできるはずです。

+0

明確にするために、次のようなことをします:spec --color ./spec -X –

+21

spec_serverはスポークのために推奨されなくなりました。 (http://github.com/timcharper/spork) – austinfromboston

+2

https://github.com/sporkrb/spork - 新しいスポークソース – ted

3

これをRailsで実行していますか?もしそうなら、それは遅いRSpecの初期化ではなく、それはRailsです。 Railsは、仕様を実行する前に、コードベースとユーザのを初期化する必要があります。さて、にはがありますが、それはありません。 RSpecは、私の小さなノンレールプロジェクトの下で私のためにかなり速く走ります。

+0

おかげレール。私はRails特有の問題を明確にしました。 –

+0

それでは、そのレール、rspecではなく、確かにあなたを遅くしています。 –

3

レール環境全体がロードされなければならない(スクリプト/コンソールを試してください)ので、すべてのテストを実行できるので、テストの実行は非常に遅くなる可能性があります。 autotestを使用して、環境をロードしたままにして、編集するファイルを確認してください。ファイルを編集して保存すると、それに依存するテストだけが自動的かつ迅速に実行されます。

2

Macを使用している場合は、autotestよりも変更されたファイルのポーリングに必要なリソースが大幅に少なくなるため、Rspactor over autotestを使用することをおすすめします。フルココアバージョン

RSpactor.app

またはこれらは、個々のRSpecのテストをスピードアップしませんが、私はGithub

sudo gem install pelle-rspactor 

で維持宝石のバージョンの両方があり、彼らははるかに速く感じる彼らの自動車など影響を受けるスペックを1秒以内に実行してください。

+0

のアイデアがありますが、リンクの更新が必要で最新のrspecでは動作しません。 –

+0

mislavsバージョンを使用することをおすすめします。 sudo gem install mislav-rspactor – Pelle

1

Windows環境の場合、RailsがWindowsの起動時に非常にゆっくりと表示されるため、おそらくほとんどできません。私はWindowsで同じ経験をしていて、セットアップをLinux VMに移して、それを本当にジッピーにしなければなりませんでした(私はオートテストも使用していました)。

+0

+1。私はLinux上でRailsとRSpecを実行し、非常に強力なマシンではあるものの、遅さの苦情はありません。私の同僚は、同じハードウェア上でWindowsを使用しています.Rails環境をロードするまでには1分ほどかかる場合があります。 –

4

なぜrspecが遅いのですか?は、すべての環境、負荷器具、すべてのジャズを読み込むためです。

Railsの初期ロードを高速化する方法はありますかデータベースに依存するのではなく模擬を試すことができますが、これは実際にユニットテストには適しており、ユニットテストのスピードアップは間違いありません。 @Marc-Andre Lafortune

により、助けることができる@Scott Matthewmanによってmentionned zentestからの自動テストと同じmentionnedとしてAdditionnaly私が必要私のRailsアプリの一部(例えばActiveRecordのもののみ)ので、を選び出すする方法はありスペックサーバーを使用してそれはいくつかのテストを実行するために絶対にすべてを読み込まない?

rake test:recent 

これについて私はRSpecのタスクはこれを統合する方法を確認していないが、あなたは間違いなく、テスト使用することができます場合はRSpecのテストで同じことを行うためのテンプレートとして、最近のタスクを。それはすべてのenvironement、負荷器具すべてがジャズをロードするため

rake test:rspec:recent 

まだ

+0

ruby​​用の新しい自動テストツールがあります:Infinity test @ http://github.com/tomas-stefano/infinity_test – Jean

+0

@Scottあなたは何をしていますか、なぜですか? – rogerdpack

4

存在しません。

rake spec,it runs the db:test:prepare taskを使用して実行した場合の本当の原因は次のとおりです。

このタスクは、テストデータベース全体を削除し、ゼロから再作成します。これは私にとってばかげているようですが、それは何ですか(同じことはrake:test:unitsなどを実行すると起こります)。

rspecがrspec gemの一部としてインストールするspecアプリケーションを使用して簡単に回避できます。このよう

cd railsapp 
spec speC# run all specs without rebuilding the whole damn database 
spec spec/models # run model specs only 

cd spec 
spec controllers/user* # run specs for controllers that start with user 
+4

DBをドロップして再作成すると、フィクスチャからのデータが正しくロードされ、以前の実行で変更が残っていないことが保証されます。ランニングスペックはそれを保証するものではありません。あなたがdbに依存するつもりなら、最初からそれを作り直す必要があります。 – Jean

4

私は、あなたが探している「禅」の経験はあなたがファイルを保存するとき、結果はほぼ瞬時のテストであることと、バックグラウンドでspec_serverautospecを実行することだと思います。

しかし、私はこれらの2つのプログラムが通信するのに問題があります。

私が説明hereが見つかりました:

私は自動テストがspec_serverにコマンドを送信しないことに気付きました。 代わりに、実行するたびにRails環境全体とアプリケーションの プラグインがリロードされます。これにより、 がスクリプトサーバーよりもかなり遅く実行されます。 script/specコマンドを実行すると、スペックはが既に起動して実行準備ができているspec_serverに送信されるためです。 新しいプラグインなどをインストールすると、 はspec_serverを再起動する必要があります。

ただし、この問題をどのように修正しますか?私はZenTestをダウンロードし、autotestプログラムのコードを変更することになると思っていますが、今すぐ試用する時間はありません。

2

rspec-rails-1.2.7から、spec_serverはspork gemのために推奨されなくなりました。

2

主な理由は、何らかの理由で、いつもが必要です。窓にはが必要です。

スピードアップのヒント: sporkがウィンドウズで動作するようになりました。

あなたは場所をキャッシュする "faster_require" 試すことができます。

http://github.com/rdp/faster_require

GL。 -rp

32

私は間違いなくスポークをチェックすることをお勧めします。

http://spork.rubyforge.org/

がrailstutorialはこれを具体的に対処して、先割れスプーンはレール3.0でうまく動作させるには、回避策を提供します(この瞬間のように、先割れスプーンは、レール3は、箱から出して準備ができていません)。もちろん、あなたがレール3.0でないなら、あなたは行くのが良いはずです。

先割れスプーンがあるときに確認するレール3.0

http://railstutorial.org/chapters/static-pages#sec:spork

に先割れスプーンランニングを取得する方法を示すチュートリアルの一部は、この回答のために3.0準備

http://www.railsplugins.org/plugins/440-spork

+1

Sporkは私にとって素晴らしい仕事をしてくれました。 –

+0

sporkに関して言及する価値のあるちょうど1つの詳細があります:Windowsでは実行されません。 – lampak

関連する問題