Capybara / Poltergeist / Devise @current_user равен нулю - Rails 4

У меня есть спецификация функции, которая получает токен с внешнего сайта и перенаправляет обратно в мое приложение. После перенаправления клиенту предоставляется представление orders#new, которое вызывает @current_user.items. Этот вызов работает во всех средах, кроме test. Капибара/Полтергейст или Селен получают undefined method items for nil class

Я пытался:

  • назначение @current_user в before(:each)
  • изменение веб-драйвера
  • установка @current_user на User.first для Rails.env.test?в моем контроллере

Как я могу убедиться, что @current_user работает в тесте?


person dimitry_n    schedule 15.10.2015    source источник


Ответы (2)


Вам нужно либо войти в свою спецификацию функций, либо использовать тестовый режим надзирателей через devise, чтобы подделать логин — см. https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara — чтобы текущий пользователь был установлен (вместе с соответствующими сеансовые файлы cookie). Тесты функций и приложение запускаются отдельно при использовании любого драйвера Capybara, отличного от стоечного теста, поэтому попытка установить @current_user в before(:each) не сработает. Установка его в контроллере, вероятно, будет работать для этого действия контроллера, но не будет устанавливать файлы cookie сеанса, если вы переходите по ссылкам и т. Д., И делать что-то подобное в контроллере только для тестирования, как правило, плохая идея.

person Thomas Walpole    schedule 15.10.2015

Ответ Тома заставил меня понять, что файлы cookie не сохраняются, потому что хосты Capybara не статичны. В итоге я явно установил server_port, server_host и app_host в rails_helper, что сработало как шарм:

Capybara.app_host = 'http://localhost:3000'
Capybara.server_host = 'localhost'
Capybara.server_port = '3000'

Мое приложение не использует Devise и Warden. В противном случае ответ Тома сработал бы.

person dimitry_n    schedule 15.10.2015
comment
Если ваше приложение не использует разработку, вы должны удалить тег разработки из вопроса. - person Thomas Walpole; 16.10.2015