проверка назначенных контроллером переменных в тестах интеграции рельсов - PullRequest
2 голосов
/ 25 ноября 2010

Я начинаю с Rails, и в настоящее время я застрял на интеграционном тестировании контроллеров.

Я пытаюсь проверить, что если определенные значения предоставляются пользователем в форме, Active Record генерирует ошибки иэти ошибки передаются в представление.

Моя проблема в том, что я понятия не имею, как получить доступ к переменным, назначенным контроллеру (например, @user), в интеграционных тестах.Как я прочитал в http://guides.rubyonrails.org/testing.html#what-to-include-in-your-functional-tests, я могу получить доступ к переменным, таким как @controller, @request, @response, но я также ожидал, что смогу легко получить доступ к переменным, назначенным контроллером.

К сожалению, такие вещи как:* @user * @ controller.user

на самом деле не работает: - /

Ответы [ 2 ]

11 голосов
/ 25 ноября 2010

Версия Rails <5.0 </strong>

Вы можете получить доступ к этим переменным, используя метод assigns с символом имени переменной в качестве параметра. Например:

assigns(:user) 

Дает вам значение @user от вашего контроллера.

Версия Rails> 5.0

В рельсах 5.0 assigns и assert_template есть been_depracted , поэтому, чтобы использовать его, как и прежде, необходимо добавить:

gem 'rails-controller-testing' 

в ваш Gemfile.

Оригинальное обсуждение почему использование assigns - плохая идея.

4 голосов
/ 24 февраля 2016

Если вы хотите убедиться, что в ваших тестах была назначена определенная переменная, вы можете использовать в своем тесте следующее утверждение.Это проверит, есть ли в вашей переменной @user в контроллере какое-то значение или нет. Если в @user есть какое-то значение, то тест пройдет, в противном случае он провалится

assert_not_nil assigns(:user)

И затем вы можете выполнить следующеекоманда для запуска теста в терминале

 ruby -I test test/integration/your_test_file_name.rb -n test_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...