9

すでにこの質問を見て、それは多かれ少なかれ私が現在スイート全体をどのように実行しているかを反映しています。

さらに、次の rake タスクをセットアップしました。

Rake::TestTask.new do |t|
  t.name = "spec:models"
  t.libs << "test"
  t.pattern = "spec/models/*_spec.rb"
end

しかし、これを を使用して実行するtime rake spec:modelsと、約 2.36 秒で完了することに気付きました。を使用してそのディレクトリですべての個々のテストを実行するとruby /path/to/spec.rb(現在、すべてが ActiveRecord から分離されています。永続性はまだないため、非常に高速です)、それらの累積合計ユーザー時間は 2.36 秒ですが、各ファイルに 0.4 ユーザーがかかることにも気付きました。開始から終了まで実行するのに数秒かかるため、MiniTest によって報告される実際の「テスト」時間ははるかに高速です (依存関係をロードした後のスイート全体は、2.36 秒ではなく、0.15 秒未満で実行されるはずです)。

例 (1 つのスペック ファイルの場合):

Started

11/11:         100% |======================================| Time: 00:00:00

Finished in 0.02223s
11 tests, 15 assertions, 0 failures, 0 errors, 0 skips
ruby path/to/spec.rb  0.43s user 0.06s system 88% cpu 0.559 total

各テストの実行の間に Rake がライブラリをリロードしているのではないかと考えており、それが余分な時間を占めています。これを確認したり、Rake を使用せずにスイート全体を実行したりできる方法はありますか?

timeところで、先ほど「ユーザー時間」と言うときは、単一​​のテスト ファイルを実行するために ruby​​ コマンドの先頭に追加して出力された最初の数値を指しているので、 time ruby /path/to/spec.rb=ruby path/to/spec.rb 0.43s user 0.06s system 88% cpu 0.559 total

4

2 に答える 2

8

spec.rbプロジェクトの最上位ディレクトリにファイルを作成します。

$:<<'spec'  # add to load path
files = Dir.glob('spec/**/*.rb') 
files.each{|file| require file.gsub(/^spec\/|.rb$/,'')}  

それを実行します:

ruby spec.rb

これがうまくいく場合は、spec.rbファイルの名前を好きなように変更したり、より適切な場所に移動したり、必要に応じてロード パスを変更したりできます。

于 2012-05-17T07:52:29.693 に答える
1

これにより、ファイル名の末尾に _spec.rb が付いた spec ディレクトリとサブディレクトリですべてのテストが実行されます。

ruby -Itest spec/**/*_spec.rb
于 2012-05-15T14:03:35.817 に答える