Запуск одиночного рельса/функциональный тест
Как заголовок.
ruby test/functionsals/whatevertest.rb не работает, поэтому мне нужно заменить все require 'test_helper'
на require File.dirname(__FILE__) + '/../test_helper'
. По какой-то причине большинство из этих тестовых шаблонов имеют такую проблему, поэтому я предпочитаю посмотреть, есть ли хак, который я мог бы обойти.
Ответы
Ответ 1
В Linux? почему бы не попробовать (cd test && ruby functionals/whatevertest.rb)
. Обратите внимание: круглые скобки важны, так как в противном случае ваш текущий каталог будет изменен на подкаталог. То, что он делает, это fork
другая оболочка, изменение в подкаталоге в ней и запуск теста.
Ответ 2
Следующий ответ основан на: Как запустить одиночный тест из набора тестов rails? (stackoverflow)
Но очень кратко, вот ответ:
ruby -I test test/functional/whatevertest.rb
Для конкретного теста functional
запустите:
ruby -I test test/functional/whatevertest.rb -n test_should_get_index
Просто поставьте символы подчеркивания в местах пробелов в именах тестов (как указано выше) или укажите заголовок следующим образом:
ruby -I test test/functional/whatevertest.rb -n 'test should get index'
Обратите внимание, что для тестов unit
просто замените functional
на unit
в приведенных выше примерах. И если вы используете bundler для управления вашими зависимостями от gem вашего приложения, вам нужно будет выполнить тесты с помощью bundle exec
следующим образом:
bundle exec ruby -I test test/unit/specific_model_test.rb
bundle exec ruby -I test test/unit/specific_model_test.rb -n test_divide_by_zero
bundle exec ruby -I test test/unit/specific_model_test.rb -n 'test divide by zero'
Самое главное, обратите внимание, что аргументом для переключателя -n
является имя теста, а слово "тест" добавлено к нему с пробелами или символами подчеркивания в зависимости от того, цитируя имя или нет. Причина в том, что test
- метод удобства. Следующие два метода эквивалентны:
test "should get high" do
assert true
end
def test_should_get_high
assert true
end
... и может выполняться как одно из следующих (они эквивалентны):
bundle exec ruby -I test test/integration/misc_test.rb -n 'test should get high'
bundle exec ruby -I test test/integration/misc_test.rb -n test_should_get_high
Ответ 3
Попробуйте следующее:
ruby -Ilib: test test/functionsals/whatevertest.rb
Ответ 4
Если вы находитесь на Rails 4, то rake поддерживает аргументы файла/каталога. Пример:
rake test test/unit/user_test.rb
rake test test/unit
Ответ 5
Ответ на вопрос заголовка будет следующим:
ruby unit/post_test.rb -n selected_test # use to run only one selected test
но для тела вопроса tvanfosson дал хороший ответ.
Ответ 6
Проведя бесконечные часы, я наконец нашел решение (в Rails 3.0.7):
ruby -I test test/functional/users_controller_test.rb -n "/the_test_name/"
Примечание. Это работает только с подставками (_) в команде. Это не работает с пробелами!
Определите тест с пробелами как:
test "the test name" do
В этом решении используется сопоставление шаблонов, поэтому вы можете использовать часть имени теста. Если тест "должен делать foo", то также будет выполнено одно из следующих действий.
ruby -I test test/functional/alerts_controller_test.rb -n "/foo/"
ruby -I test test/functional/alerts_controller_test.rb -n "/do_foo/"
Следующий (с пробелами) не будет работать:
ruby -I test test/functional/alerts_controller_test.rb -n "/do foo/"
Ответ 7
Самый обычный метод для 2 и 3:
ruby -I test test/functional/your_test_file.rb