Можно ли запустить один тест в MiniTest? - PullRequest
152 голосов
/ 13 марта 2011

Я могу запустить все тесты в одном файле с:

rake test TEST=path/to/test_file.rb

Однако, если я хочу запустить только один тест в этом файле, как бы я это сделал?

IИщите похожие функции:

rspec path/to/test_file.rb -l 25

Ответы [ 13 ]

195 голосов
/ 19 мая 2012

Команда должна быть:

% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"
143 голосов
/ 14 марта 2011

Вы пробовали:

ruby path/to/test_file.rb --name test_method_name
48 голосов
/ 30 марта 2013

Камень не требуется: ruby -Itest test/lib/test.rb --name /some_test/

Источник: http://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9

47 голосов
/ 16 февраля 2012

Это одна из вещей, которая беспокоит меня о string name definition в тестах.

Когда у вас есть:

def test_my_test
end

вы всегда знаете, как называется ваш тест, поэтому вы можете выполнить его следующим образом:

ruby my_test -n test_my_test

Но когда у вас есть что-то вроде:

it "my test" do
end

вы никогда не знаете, как этот тест на самом деле назван внутренне, поэтому вы не можете использовать опцию -n напрямую.

Чтобы узнать, как этот тест называется внутренне, у вас есть только опция: выполнить весь файл, чтобы попытаться выяснить, просматривая журналы.

Мой обходной путь - (временно) добавить что-то к имени теста, очень уникальное, например:

it "my test xxx" do
end

, а затем используйте RegEx версию параметра '-n', например:

ruby my_test.rb -n /xxx/
43 голосов
/ 26 апреля 2012

Я ищу функции, аналогичные rspec path / to / file.rb -l 25

Да! Используйте камень "m" Ника Кваранто . С его помощью вы можете сказать:

m spec/my_spec.rb:25
24 голосов
/ 29 августа 2016

Если вы используете MiniTest с Rails 5, лучший способ запустить все тесты в одном файле:

bin/rails test path/to/test_file.rb

И для одного теста (например, в строке 25):

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

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

21 голосов
/ 27 марта 2014

Вы можете использовать это для запуска одного файла:

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

Я также использовал

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

для лучшего отображения.

11 голосов
/ 25 апреля 2011

Есть 2 способа сделать это:

  1. Запускать тесты «вручную» (см. Ответ Эндрю Гримма).
  2. Взломать Rake::TestTask цель использовать другой загрузчик тестов.

Rake::TestTask (с граблями 0.8.7) теоретически может передавать дополнительные параметры в MiniTest::Unit с параметром командной строки "TESTOPTS=blah-blah", например:

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

На практике опция --name (фильтр для имен тестов) не будет работать из-за внутренних граблей.Чтобы исправить это, вам нужно написать небольшой патч обезьяны в вашем 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
8 голосов
/ 13 августа 2014

Вы можете передать --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

Этот флаг задокументирован в ЧТЕНИИ Минитеста .

1 голос
/ 24 июля 2012

Если вы используете Turn gem с minitest, просто используйте опцию Turn.config.pattern, поскольку бегун Turn Minitest не учитывает опцию --name в ARG.

...