Я могу запускать все тесты в одном файле с помощью
rake test TEST=path/to/test_file.rb
Однако, если я хочу запустить только один тест в этом файле, как бы я это сделал?
Я ищу аналогичную функциональность для:
rspec path/to/test_file.rb -l 25
Я могу запускать все тесты в одном файле с помощью
rake test TEST=path/to/test_file.rb
Однако, если я хочу запустить только один тест в этом файле, как бы я это сделал?
Я ищу аналогичную функциональность для:
rspec path/to/test_file.rb -l 25
Я ищу аналогичную функциональность для rspec path/to/file.rb -l 25
Да! Используйте Ник Каранто "m" gem. С его помощью вы можете сказать:
m spec/my_spec.rb:25
Команда должна быть:
% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"
Вы пробовали:
ruby path/to/test_file.rb --name test_method_name
Никакой драгоценный камень не требуется:
ruby -Itest test/lib/test.rb --name /some_test/
Источник: http://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9
Это одна из вещей, которые беспокоят меня о 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/
Если вы используете 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
Вы можете использовать это для запуска одного файла:
rake test TEST=test/path/to/file.rb
Я также использовал
ruby -I"lib:test" test/path/to/file.rb
для лучшего отображения.
Есть два способа сделать это:
Rake::TestTask
target для использования другого загрузчика тестов. Rake::TestTask
(от rake 0.8.7) теоретически может передать дополнительные опции MiniTest::Unit
с помощью опции командной строки "TESTOPTS=blah-blah"
, например:
% rake test 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
Вы можете передать --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
Этот флаг задокументирован в Minitests README.
Если вы используете Turn gem с minitest, просто убедитесь, что используете опцию Turn.config.pattern
, так как Run Minitest runner не учитывает параметр -name в ARG.
Я использую ruby/path/to/test -n/distinguishable word/
Изменение: -n
является сокращением для --name
. distinguishable word
может быть любая строка, которую вы указали в описании теста, я обычно использую какое-то случайное слово, которое, как я знаю, не будет присутствовать в описании других тестов.
Следующий будет работать
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
Я ищу аналогичную функциональность для:
rspec path/to/test_file.rb -l 25
Есть камень, который делает именно это: minitest-line
.
gem install minitest-line
ruby test/my_file -l 5