11

いくつかのテストを実行した後、セットアップ(Windows、Rubymine、および最新のRubyバージョン)に何か問題があるはずだと確信しています。今の私の時間は次のとおりです。

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
4

3 に答える 3

6

あなたの問題はWindowsです。WindowsではJRubyを使用しており、実際にはWindowsのRubyInstaller(mingw)rubyよりも高速に実行されますが、テストスイートを実行したりRailsサーバーを起動したりすると、結果が非​​常に遅くなります。Rails環境のロードにより、1回のテスト実行で約1分。いくつかのオプションがあります。

  1. linux/osxに切り替えます
  2. sporkを使用して、テスト用にいくつかのRails環境をプリロードしておきます。これは完璧ではありませんが、時間を大幅に短縮できることに注意してください。このオプションを使用すると、おそらくminitestまたはrspecを使用することになりますが、Windowsでtestunitを使用してsporkを動作させるのに問題がありました。sporkを使用すると、単一のテスト実行時間を約10秒に短縮できるはずです。
  3. Railsの外部で実行する、つまりRailsスタックを必要としないテストをできるだけ多く記述します。これは非常に高速で、数秒でテストを実行できるはずですが、ご想像のとおり、レールの外側で多くのもの(コントローラー、ビュー)をテストするのは困難です。ただし、レールから何も必要としないモジュールに分割した関数の場合は、完全に機能します。

幸運を!

于 2012-08-11T16:16:05.787 に答える
2

あなたの宝石スタックの残りは何ですか?サードパーティの宝石がレールによって初期化され、自宅に電話をかけようとすることがあります(New Relic、Airbrake)。これにより、テスト時間が長くなる可能性があります(おそらくそれほどではありませんが)。テストスイートに厳密に必要でないものがある場合は、それを適切なenvグループにプルするか、require :falsebundlerを介して設定する必要があります。

グループ:プロダクションdo
  gem'newrelic_rpm'
終わり
于 2012-08-14T02:40:47.210 に答える
0

起動時間があなたを殺しているように見えるので、あなたと私はおそらく同じ船に乗っています。JodellとDarkCastleの間では、これについてはすでに多くのことが説明されていますが、これが、有効性の高い順に、役に立ったもののほぼすべてのリストです。

  1. 2.0ファイルシステムの改善がバックポートされたパッチ1.9.3を入手してください。最初の数字は2倍良くなりますが、最初の数字は不安定だと感じたので、2番目の数字を使用しています
  2. GCオプションを設定する
  3. カバレッジデータの収集をオフにします(私のIDEはこれを志願し続けました)
  4. Sporkを実行し、set SPEC_OPTS=--drb
  5. ウイルススキャナーをオフにします(実際にはこれを行わないでください。とにかく私にとっては10%の価値しかありません)
  6. ジェムを再確認し、requireでジェムのロードを遅らせます:false

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

于 2012-10-12T18:02:41.997 に答える