работающая единица рельсов / функциональная проверка - PullRequest
30 голосов
/ 08 ноября 2008

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

ruby ​​test / functionals / whattest.rb не работает, поэтому я должен заменить все require 'test_helper' на require File.dirname(__FILE__) + '/../test_helper'. По какой-то причине большинство из этих тестовых шаблонов имеют такую ​​проблему, поэтому я бы предпочел посмотреть, есть ли взлом, который я мог бы обойти.

Ответы [ 7 ]

48 голосов
/ 02 ноября 2011

Следующий ответ основан на: Как запустить отдельный тест из набора тестов 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 для управления гем-зависимостями вашего приложения, вам придется выполнить тесты с 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 - это удобный метод. Следующие два метода эквивалентны :

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
13 голосов
/ 14 февраля 2009

Попробуйте это:

ruby ​​-Ilib: тестовый тест / функционалы / whattesttest.rb

9 голосов
/ 08 ноября 2008

в линуксе? почему бы не попробовать (cd test && ruby functionals/whatevertest.rb). Обратите внимание, скобки важны, так как в противном случае ваш текущий каталог изменится на подкаталог. fork это еще одна оболочка, перейдите в подкаталог и запустите тест.

5 голосов
/ 06 февраля 2014

Если вы на Rails 4, то rake поддерживает аргументы file / directory. Пример:

rake test test/unit/user_test.rb
rake test test/unit
4 голосов
/ 05 сентября 2012

Потратив на это бесконечные часы, я наконец нашел решение (в 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/"
4 голосов
/ 26 августа 2010

Ответ на заглавный вопрос будет:

ruby unit/post_test.rb -n selected_test # use to run only one selected test

но по существу вопроса tvanfosson дал хороший ответ.

0 голосов
/ 27 апреля 2012

самый обычный метод для 2 и 3:

ruby ​​-I тестовый тест / функциональный / your_test_file.rb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...