MiniTestで単一のテストを実行することは可能ですか?


168

私は単一のファイルですべてのテストを実行できます:

rake test TEST=path/to/test_file.rb

ただし、そのファイルで1つのテストのみを実行したい場合、どうすればよいですか?

私は同様の機能を探しています:

rspec path/to/test_file.rb -l 25

3
8年後とレール5+ユーザーがためにrails test path/to/test_file.rb:25見@Derek_Hill ANS -から取らguides.rubyonrails.org/testing.html#the-rails-test-runner
notapatch

回答:


44

rspec path / to / file.rb -l 25と同様の機能を探しています。

うん!使用ニックQuarantoの「M」宝石。それであなたは言うことができます:

m spec/my_spec.rb:25

4
答えは機能し、正確に尋ねられたとおりでしたが、:-)単一のテストを実行するミニテストの方法は、名前の一致によるものです(グリム氏の答えを参照)。これを試して拒否した場合は、Nick's Gemなどの非標準の代替手段を試してみましょう。
notapatch 2013

3
確かに、私は同意します。私は実際にmがオプションとして-nも渡せるようにしたい...またはMiniTestが行番号とメソッド名の使用のみをサポートしていることを望みます。
Elliot Winkler、


このgemはrspecの単一のテストを実行する方法に似ていますが、Minitestには、まさに問題だった単一のテストを実行する組み込みの方法があります。依存関係は必要ありません。アクセサリの宝石(多くの周りにあるかもしれません)で簡単にできることを知っておくのは良いことですが、この質問では、jduanやrandomorのような純粋なミニテストの回答の方が適していると
思い

209

コマンドは次のようになります。

% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"

6
+1-これはあなたがやりたいことです。特定のファイルですべてのテストをテストする場合は、そのままにしTESTOPTS=...てください
awenkhh

非常に役立つ答え。テストレポートの最後に、失敗したテストの再実行コマンドを表示するようにMinitestReporterを作成します。参照:gist.github.com/foton/141b9f73caccf13ccfcc
Foton

1
何をし-vますか?
Jon Schneider

149

やってみました:

ruby path/to/test_file.rb --name test_method_name

10
のように定義されたMinispecを使用したテストについてはどうspecify {}ですか?それらはtest_0001_anonymous...と表示されtest_0001_anonymous、同じ構文が複数の記述ブロックで使用されている場合、複数のが存在する可能性があります...このような環境で単一のテストを実行するための提案はありますか?
neezer

1
「tc」は「テストケース」を表します。
Andrew Grimm

4
それは言うcannot load such file -- test_helper
x-yuri 2015年

11
stackoverflow.com/a/15714985/327786のruby -Itest path/to/tc_file.rb --name test_method_nameように使用
TlmaK0

bundle exec ruby -I lib path/to --name test_fit
puchu


49

これはstring name definition、テストで私が気になることの1つです。

あなたが持っているとき:

def test_my_test
end

次のように実行できるように、テストの名前が常にわかっています。

ruby my_test -n test_my_test

しかし、次のような場合:

it "my test" do
end

このテストが実際に内部でどのように命名されているかは決してわからないため、-nオプションを直接使用することはできません。

このテストが内部でどのように命名されているかを知るには、オプションのみがあります。ファイル全体を実行して、ログを調べてみてください。

私の回避策は、(一時的に)次のように非常にユニークなものをテスト名に追加することです:

it "my test xxx" do
end

次に、「-n」パラメータのRegExバージョンを使用します。

ruby my_test.rb -n /xxx/

6
-nパラメータの正規表現バージョンは、情報のクラッチ部分でした、ありがとう!
Woahdae 2013年

これ__method__は、現在実行中のメソッド(この例ではテスト)のコンテキスト内で呼び出すことで確認できます。現在の実装では、次のような結果になり"does not break my stuff".gsub(" ", "_").prepend("test_")ます。次に、たとえばを実行しruby -Itest test/integration/stuff_flow_test.rb --name test_does_not_break_my_stuffます。
TK-421 2016


23

これを使用して、単一のファイルを実行できます。

rake test TEST=test/path/to/file.rb

私も使った

ruby -I"lib:test" test/path/to/file.rb

より良い表示のために。


12

それには2つの方法があります。

  1. テストを「手動で」実行します(Andrew Grimmの回答を参照)。
  2. Rake::TestTaskターゲットをハックして、別のテストローダーを使用します。

Rake::TestTask(レーキ0.8.7から)理論的には、追加のオプションを渡すことができ、MiniTest::UnitAと"TESTOPTS=blah-blah"コマンドラインオプションをます。次に例を示します。

%レイクテストTEST = test / test_foobar.rb TESTOPTS = "-name test_foobar1 -v"

実際には、オプション--name(テスト名のフィルター)は、Rake内部のために機能しません。これを修正するには、Rakefileに小さなモンキーパッチを記述する必要があります。

# overriding the default rake tests loader
class Rake::TestTask
  def rake_loader
    'test/my-minitest-loader.rb'
  end
end

# our usual test terget 
Rake::TestTask.new {|i|
  i.test_files = FileList['test/test_*.rb']
  i.verbose = true 
}

このパッチでは、ファイルを作成する必要がありますtest/my-minitest-loader.rb

ARGV.each { |f|
  break if f =~ /^-/
  load f
}

Minitestのすべての可能なオプションを印刷するには、次のように入力します。

%ruby -r minitest / autorun -e ''---help

3
最初の例は、より新しいrake(0.9.2)でも正しく機能し、サルのパッチは必要ありません。
混乱

1
rakeバージョン10.5.0で試したところ、TESTOPTS="--name test_foobar"機能しませんが、TESTOPTS="--name=test_foobar"機能します。
2016

11

--nameテストを実行するには、その名前またはその名前内の番号を指定して渡すことができます。

-n, --name PATTERN               Filter run on /regexp/ or string.

例えば:

$ ruby spec/stories/foo_spec.rb --name 3

FAIL (0:00:00.022) test_0003_has foo
Expected: "foo"
Actual: nil

このフラグはMinitestのREADMEに記載されています


1

Turn gemをminitestで使用しているTurn.config.pattern場合は、オプションを必ず使用してください。ArnsのTurn Minitestランナーは--nameオプションを考慮しないためです。


これは、Turnがnameオプションを飲み込んでいるものであることを理解するために必要なヒントでした。ありがとう!そのターンが維持されなくなったので、私はminitest-reportersに移行する予定です
pdobb '27 / 07/15

1

私は同様の機能を探しています:

rspec path / to / test_file.rb -l 25

まさにそれをする宝石があります:minitest-line

gem install minitest-line
ruby test/my_file -l 5

https://github.com/judofyr/minitest-line#minitest-lineから


こんにちは@ChrisHough、正確に何が機能していないか(たとえば、エラーメッセージ)を説明できますか?minitest-line gemの目的は、MiniTestで単一のテストを実行することだけです。それが機能しない場合は、minitest-lineにバグを発見した可能性があります。
knugie

1

私が使う ruby /path/to/test -n /distinguishable word/

編集: -nはの省略形です--namedistinguishable wordテストの説明に入力する任意の文字列を使用できますが、通常、他のテストの説明には存在しないことがわかっているランダムな単語を使用します。


それをさらに説明できますか?その-nパラメーターはどういう意味ですか?
Nico Haase

これはの省略形です--name。ただ便利なことです。/ regex /を使用すると特に便利です。私は通常、ランダムな単語をテスト名に挿入します(他のテストの説明には存在しないことがわかっています)。
sloneorzeszki

1
コメントセクションではなく、回答自体にその説明を追加してください
Nico Haase

0

以下は動作します

def test_abc
end

test "hello world"
end

これは

bundle exec ruby -I test path/to/test -n test_abc

bundle exec ruby -I test path/to/test -n test_hello_word

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.