Is it possible to run a single test in MiniTest?

RubyRuby on-Rails-3Minitest

Ruby Problem Overview


I can run all tests in a single file with:

rake test TEST=path/to/test_file.rb

However, if I want to run just one test in that file, how would I do it?

I'm looking for similar functionality to:

rspec path/to/test_file.rb -l 25

Ruby Solutions


Solution 1 - Ruby

The command should be:

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

Solution 2 - Ruby

Have you tried:

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

Solution 3 - Ruby

No gem required: ruby -Itest test/lib/test.rb --name /some_test/

Source: http://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9

Solution 4 - Ruby

This is one of the things that bother me about the string name definition in tests.

When you have:

def test_my_test
end

you always know how your test is named so you can execute it like this:

ruby my_test -n test_my_test

But when you have something like:

it "my test" do
end

you are never sure how this test is really named internally so you can not use the -n option just directly.

To know how this test is named internally you only have an option: execute the whole file to try to figure out looking in the logs.

My workaround is (temporally) add something to the test name very unique like:

it "my test xxx" do
end

and then use the RegEx version of the '-n' parameter like:

ruby my_test.rb -n /xxx/

Solution 5 - Ruby

> I'm looking for similar functionality to rspec path/to/file.rb -l 25

With Nick Quaranto's "m" gem, you can say:

m spec/my_spec.rb:25

Solution 6 - Ruby

If you are using MiniTest with Rails 5+ the best way to run all tests in a single file is:

bin/rails test path/to/test_file.rb

And for a single test (e.g. on line 25):

bin/rails test path/to/test_file.rb:25

See http://guides.rubyonrails.org/testing.html#the-rails-test-runner

Solution 7 - Ruby

You can use this to run a single file:

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

I also used

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

for better display.

Solution 8 - Ruby

There are 2 ways to do it:

  1. Run tests 'manually' (see Andrew Grimm's answer).
  2. Hack Rake::TestTask target to use a different tests loader.

Rake::TestTask (from rake 0.8.7) theoretically is able to pass additional options to MiniTest::Unit with a "TESTOPTS=blah-blah" command line option, for example:

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

In practice, the option --name (a filter for test names) won't work, due to rake internals. To fix that you'll need to write a small monkey patch in your 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 
}

This patch requires you to create a file test/my-minitest-loader.rb:

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

To print all possible options for Minitest, type

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

Solution 9 - Ruby

You can pass --name to run a test by its name or a number within its name:

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

e.g.:

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

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

This flag is documented in Minitest’s README.

Solution 10 - Ruby

If you are using Turn gem with minitest, just make sure to use Turn.config.pattern option since Turn Minitest runner doesn't respect --name option in ARGs.

Solution 11 - Ruby

> I'm looking for similar functionality to: > > rspec path/to/test_file.rb -l 25

There is a gem that does exactly that: minitest-line.

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

from https://github.com/judofyr/minitest-line#minitest-line

Solution 12 - Ruby

I use ruby /path/to/test -n /distinguishable word/

Edit: -n is a shorthand for --name. distinguishable word can be any string you put in the test description, I usually use some random word that I know won't be present in other tests' descriptions.

Solution 13 - Ruby

Following will work

def test_abc
end

test "hello world"
end

This can run by

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

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

Solution 14 - Ruby

I am in Rails Version 4.2.11.3 and Ruby Version 2.4.7p357

Below one worked for me.

ruby -Itest <relative_minitest_file_path> --name /<test_name>/

Solution 15 - Ruby

Install gem minitest-focus and use the keyword focus on test/spec like below to run only the specific test.

focus
def test
end


focus
it "test" do
end

This would not need any command line argument to be passed.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJosiah KiehlView Question on Stackoverflow
Solution 1 - RubyjduanView Answer on Stackoverflow
Solution 2 - RubyAndrew GrimmView Answer on Stackoverflow
Solution 3 - RubyrandomorView Answer on Stackoverflow
Solution 4 - RubyfguillenView Answer on Stackoverflow
Solution 5 - RubyElliot WinklerView Answer on Stackoverflow
Solution 6 - RubyDerek HillView Answer on Stackoverflow
Solution 7 - RubytuhajView Answer on Stackoverflow
Solution 8 - RubyAlexander GromnitskyView Answer on Stackoverflow
Solution 9 - RubyRimianView Answer on Stackoverflow
Solution 10 - RubyLaknathView Answer on Stackoverflow
Solution 11 - RubyknugieView Answer on Stackoverflow
Solution 12 - RubysloneorzeszkiView Answer on Stackoverflow
Solution 13 - Rubyuser4636030View Answer on Stackoverflow
Solution 14 - RubyVasanth SaminathanView Answer on Stackoverflow
Solution 15 - RubyparView Answer on Stackoverflow