Запуск одиночного рельса/функциональный тест

Как заголовок.

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