Railsアプリケーションに対してrspecテストを実行するときはいつでも、実際にテストの実行を開始するまでに永遠に1日かかるオーバーヘッドがあります。rspecが非常に遅いのはなぜですか?Railsの初期ロードを高速化する方法はありますか?または、必要なRailsアプリ(ActiveRecordのもののみなど)の一部を選択して、いくつかのテストを実行するためにすべてを完全にロードしないようにしますか?
別のターミナルウィンドウでscript/spec
を実行し、スペック呼び出しにscript/spec_server
パラメータを追加することで、-X
呼び出しを高速化できるはずです。
私は間違いなくスポークをチェックすることをお勧めします。
Railstutorialは特にこれに対処し、Rails 3.0でスポークをうまく実行するための回避策を提供します(現時点では、スポークはRails 3もちろん、Rails 3.0を使用していない場合は、問題ないはずです。
Rails 3.0でスポークを実行する方法を示すチュートリアルの一部
http://railstutorial.org/chapters/static-pages#sec:spork
スポークがRails 3.0の準備ができているとき
それはすべての環境をロードし、備品とそのすべてのジャズをロードするからです。
本当の原因は、rake spec
を使用して実行した場合、 db:test:prepare
タスクを実行します です。
このタスクは、テストデータベース全体を削除し、最初から再作成します。これは私にはばかげているように見えますが、それはそれが行うことです(rake:test:units
などを実行したときに同じことが起こります)。
これは、rspecがrspecgemの一部としてインストールする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
rspecがとても遅いのはなぜですか?すべての環境をロードし、フィクスチャとそのすべてのジャズをロードするからです。
Railsの初期ロードを高速化する方法はありますかデータベースに依存する代わりにモックを使用してみることができます。これは実際には単体テストに適しています。ユニットテストを確実にスピードアップします。さらに、@ Scott Matthewman が言及したスペックサーバーを使用すると、@ Marc-Andre Lafortune が言及したzentestの自動テストと同じように役立ちます。
必要なRailsアプリ(ActiveRecordのもののみ)など)の一部を特定して、実行するためにすべてを完全にロードしないようにする方法はありますか?いくつかのテスト?これはどうですか
rake test:recent
Rspecタスクがこれとどのように統合されるかはわかりませんが、test:recentタスクをテンプレートとして使用して、rspecテストで同じことを行うことができます。
rake test:rspec:recent
まだ存在しません
あなたが探している「禅」体験は、バックグラウンドでspec_server
とautospec
を実行することであり、その結果、ファイルを保存するときにほぼ瞬時にテストが行われると思います。
ただし、これら2つのプログラムを通信させるのに問題があります。
説明を見つけました ここ :
自動テストがspec_serverにコマンドを送信しないことに気づきました。代わりに、実行するたびにRails環境全体とアプリケーションのプラグインをリロードします。これにより、スクリプト/スペックコマンドを実行するとスペックがに送信されるため、自動テストの実行速度がスクリプトサーバーよりも大幅に遅くなります。すでにRails環境が起動し、準備ができているspec_server。新しいプラグインなどをインストールした場合は、spec_serverを再起動する必要があります。
しかし、どうすればこの問題を修正できますか? ZenTestをダウンロードし、autotest
プログラムのコードを変更する必要があると思いますが、今は試してみる時間がありません。
Rails環境全体をロードする必要があり(スクリプト/コンソールを試してください)、その後すべてのテストを実行できるため、テストの実行は非常に遅くなる可能性があります。 autotest を使用する必要があります。環境がロードされ、編集するファイルがチェックされます。ファイルを編集して保存すると、これらに依存するテストのみが自動的かつ迅速に実行されます。
これをRailsで実行していますか?もしそうなら、遅いのはRSpecの初期化ではなく、Railsです。 Railsは、スペックを実行する前に、コードベース全体とあなたのコードベースを初期化する必要がありますが、そうではありませんhaveto、しかしそれはそうです。RSpecは私の小さな非Railsプロジェクトの下で私にとってかなり速く実行されます。
Rspec-Rails-1.2.7の時点で、spec_serverは廃止され、sporkgemが優先されます。
主な理由は、何らかの理由で、ウィンドウでrequire takeforeverが発生することです。
高速化のヒント:スポークはWindowsで動作するようになりました。
場所をキャッシュする「faster_require」を試すことができます。
http://github.com/rdp/faster_require
GL。 -rp
Macを使用している場合は、自動テストよりもRspactorを使用することをお勧めします。これは、自動テストよりも変更されたファイルのポーリングに使用するリソースがはるかに少ないためです。両方の完全なCocoaバージョンがあります
または私が維持しているgemバージョン Github
Sudo gem install pelle-rspactor
これらは個々のrspecテストをスピードアップしませんが、保存を押してから1秒以内に影響を受けるスペックを自動実行するため、はるかに速く感じます。
Windows環境を使用している場合は、RailsはWindowsでの起動が非常に遅いようです。Windowsでも同じ経験があり、セットアップをLinuxに移動する必要がありました。 VMそれを本当に気の利いたものにするために(私も自動テストを使用していました)。