45

Rails アプリケーションの rspec テストを実行するたびに、実際にテストの実行を開始するまでに 1 日のオーバーヘッドがかかります。なぜrspecはとても遅いのですか? Rails の初期ロードを高速化する方法や、必要な Rails アプリの一部 (たとえば、ActiveRecord のもののみ) を選択して、いくつかのテストを実行するためにすべてを完全にロードしないようにする方法はありますか?

4

11 に答える 11

32

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

http://spork.rubyforge.org/

railstutorial は特にこれに対処し、Rails 3.0 で spork を適切に実行するための回避策を提供します (現時点では、spork はそのままで Rails 3 に対応していません)。もちろん、Rails 3.0 を使用していない場合でも問題ありません。

Rails 3.0 で spork を実行する方法を示すチュートリアルの部分

http://railstutorial.org/chapters/static-pages#sec:スポーク

スポークが Rails 3.0 に対応していることを確認する

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

于 2010-10-27T20:59:38.790 に答える
22

script/spec別のターミナル ウィンドウで実行し、spec 呼び出しにscript/spec_server追加のパラメーターを追加することで、呼び出しを高速化できるはずです。-X

于 2008-09-15T22:38:59.903 に答える
4

なぜrspecはとても遅いのですか? すべての環境、フィクスチャ、およびすべてのジャズをロードするためです。

データベースに依存する代わりにモックを使用して試すことができるRailsの初期ロードを高速化する方法はありますか?これは実際には単体テストには正しく、単体テストを確実に高速化します。さらに、@ Scott Matthewmanが言及した仕様サーバーを使用すると、@ Marc-Andre Lafortuneが言及した zentest の自動テストと同じように役立ちます。

いくつかのテストを実行するために完全にすべてをロードしないように、Rails アプリの必要な部分 (たとえば、ActiveRecord のもののみ) を選択する方法はありますか? これはどうですか

rake test:recent 

rspec タスクがこれとどのように統合されるかはわかりませんが、test:recent タスクをテンプレートとして使用して、rspec テストで同じことを行うことができます。

rake test:rspec:recent

まだ存在しません

于 2008-09-16T16:33:48.400 に答える
4

すべての環境、フィクスチャ、およびすべてのジャズをロードするためです。

本当の原因は、を使用して実行するとrake specタスクがdb:test:prepare実行されることです。

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

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

このような:

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
于 2008-09-17T01:14:17.197 に答える
4

あなたが探している「禅」体験は、バックグラウンドで実行することでspec_serverありautospec、その結果、ファイルを保存するとほぼ瞬時にテストが行​​われると思います。

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

ここで説明を見つけました:

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

しかし、どうすればこの問題を解決できるでしょうか? ZenTest をダウンロードしてautotestプログラムのコードを変更する必要があると思いますが、今は試す時間がありません。

于 2008-11-12T00:16:41.187 に答える
3

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

于 2008-09-15T22:58:34.193 に答える
3

これをRailsで実行していますか?もしそうなら、遅いのは RSpec の初期化ではなく、Rails です。Rails は、spec を実行する前に、コードベース全体とあなたのコードベースを初期化する必要があります。まあ、そうする必要はありません、そうする必要があります。私の小さな非Railsプロジェクトでは、RSpecはかなり高速に動作します。

于 2008-09-15T20:47:23.260 に答える
2

Mac を使用している場合は、autotest よりも変更されたファイルのポーリングに使用するリソースがはるかに少ないため、autotest よりも Rspactor を使用することをお勧めします。完全な Cocoa バージョンの両方があります

RSpactor.app

または私がGithubで管理している gem バージョン

sudo gem install pelle-rspactor

これらは個々の rspec テストを高速化するわけではありませんが、保存を押してから 1 秒以内に影響を受ける仕様を自動実行するため、はるかに高速に感じられます。

于 2008-09-16T01:27:17.860 に答える
2

rspec-rails-1.2.7 の時点で、spork gem が優先され、spec_server は非推奨になりました。

于 2010-02-17T21:54:35.117 に答える
2

主な理由は、require が何らかの理由でWi​​ndows で永遠にかかることです。

スピードアップのヒント: spork は Windows で動作するようになったと思います。

場所をキャッシュする「faster_require」を試すことができます:

http://github.com/rdp/faster_require

GL。-rp

于 2010-06-03T17:11:48.600 に答える
1

Windows環境でRailsの起動が非常に遅いため、Windows環境でできることはおそらくほとんどありません。Windows でも同じ経験があり、セットアップを Linux VM に移動して、本当に高速にする必要がありました (自動テストも使用していました)。

于 2008-09-16T09:05:58.320 に答える