2012-08-05 22 views
11

いくつかのテストを実行した後、セットアップ(Windows、Rubymine、最新のルビーバージョン)に何か問題があると確信しています。私の今の時は:非常に遅いレイクテスト

Finished tests in 14.289817s, 0.0700 tests/s, 0.3499 assertions/s. 

1 tests, 5 assertions, 0 failures, 0 errors, 0 skips 

Process finished with exit code 0 

5つの非常に簡単なテスト(空のフィールドでの検証が機能するかどうかをチェックするだけです)。これらの5つのユニットテストの合計時間は160秒で、2分以上です。

この速度を向上させるにはどうすればよいですか?ここで

はテストです:

require 'test_helper' 

class ItemTest < ActiveSupport::TestCase 
    test 'item attributes must not be empty' do 
    item = Item.new 
    assert item.invalid? 
    assert item.errors[:name].any? 
    assert item.errors[:description].any? 
    assert item.errors[:image_url].any? 
    assert item.errors[:rating].any? 
    end 
end 
+0

高速機を購入しますか?正直なところ、あなたのテストについての深い知識がなければ、それを伝えるのは難しいです。 – iltempo

+0

テストを追加しました – Organiccat

+1

今、私は遅さに感心しています。あなたはデータベースを打つことさえしていません。 Rails環境の読み込みには多くの時間がかかります。 'rake -vT'はどれくらい稼働していますか? – iltempo

答えて

6

あなたの問題は、Windowsです。私たちはWindows上でJRubyを使用していますが、実際にはWindows上ではRubyInstaller(mingw)rubyよりも高速に動作しますが、テストスイートを実行したり、レールサーバーを起動すると非常に遅い結果になります。 Rails環境のロードにより、1回のテスト実行で約1分。あなたのテストのために事前にロードされたカップルのレールの環境を維持するために

  • のLinux/OSXに使用先割れスプーンを

    1. スイッチ: あなたはいくつかのオプションがあります。これは完璧ではありませんが、時間が大幅に短縮されることに注意してください。このオプションを使用すると、おそらくminitestまたはrspecを使いたいでしょう。私はsporkをtestunitでWindows上で動作させるのに問題がありました。 sporkを使用すると、1回のテスト実行時間を約10秒に短縮することができます。
    2. Rails以外で実行するテスト、つまりRailsスタックを必要としないテストをいくつでも書いてください。これは非常に速く、ほんの数秒でテストを実行できるはずですが、推測できるように、レールの外で多くのもの(コントローラ、ビュー)をテストするのは難しいです。すでにレールから何も必要としないモジュールに分割した機能のためには完全に機能します。

    幸運!

    +0

    コメントありがとうございます。私は当初、レールがWindows上でひどく走っていたことに気づいていませんでした。私はUnixベースのMac環境ではより速く動くことができると思いますか?レールを正しく走らせるマシンにアクセスできるようになるまで、私はRoRを延期することに決めました。レールが一般的ではない(私の個人的な意見では)これが主な理由だと思います。 – Organiccat

    +0

    はい、もちろん、Railsや多くのスクリプト言語は* nix環境向けに書かれていますので、Macはうまく動作します。 Windowsは後世のようなもので、特にRailsの場合は大幅に遅くなります。ほとんどのRailsの作業が完了した環境で作業を始めれば、自分で時間を節約できます。 –

    +0

    私は仮想マシン(virtualbox)を作成し、そこにlinuxをインストールしました。テスト時間は、32秒から11秒(まだそれほど大きくない)です。私は、たとえソフトウェアエミュレーションから実行されたとしても、ルビーがLinuxでもっと速く動くことを知ることができます。 – Pynner

    2

    あなたの宝石の残りの部分は何ですか?時にはサードパーティ製の宝石類がレールで初期化され、あなたのテスト時間を膨らませる可能性のある電話機の家(New Relic、Airbrake)を試すことになります。何かが厳密にテストスイートのために必要とされていない場合、あなたは正しいのenvグループにそれを引っ張ったり、バンドラ経由require :falseを設定しようとする必要があります:

     
    group :production do 
        gem 'newrelic_rpm' 
    end 
    
    0

    起動時間はあなたを殺すように見えるので、あなたと私は、おそらく同じボートで。ジョーデルとダークキャッスルの間には既にこれがたくさんありますが、効力の降順で助けてくれるもののリストはほぼ全部です。

    1. パッチが適用された1.9.3を、2.0ファイルシステムの改善をバックポートして入手してください。最初は2倍、より良い数字を取得しますが、私は最初にあなたのGCのオプション
    2. カバレッジデータの収集をオフにします(私のIDEはこれをボランティアし続けました)
    3. 実行先割れスプーン、およびウイルススキャナオフset SPEC_OPTS=--drb
    4. 電源を入れ
    5. が必要と宝石の読み込みを遅らせる、あなたの宝石をダブルチェック(実際にこれをしない、それはとにかく私のためだけの価値は10%です):偽

    6私は実際に私を非常に購入していませんでした。私たちが間違っていた最大の理由は、Thinを無条件にロードすることです(これはEventMachineをインストールしますが、インストールされた21メガバイトですが)スタック上の次の3つはRSpecによって実際に使用されていました。私はネットワークのトラフィックを見ていないが、おそらくJodellはそこに何かがあるだろう。