Помощники разработчиков не доступны в определениях шагов огурца - PullRequest
4 голосов
/ 31 октября 2011

Я использую огурец для тестирования моего приложения rails 3.1, и я использую devise для аутентификации.Мне нужно проверить, совпадает ли адрес электронной почты текущего пользователя с тем, который использовался при авторизации.Проблема в том, что разработчики помощников не доступны в определении шага огурца.

Есть ли какое-либо решение сделать помощников разработчика доступными в определениях шага огурца?

Я пробовал это:

Cucumber::Rails::World.send('define_method', 'current_user') do
    @current_user ||= (session[:user] && User.find(session[:user])) || :false
end

но это не помогло.

Ответы [ 3 ]

7 голосов
/ 29 января 2012

Добавьте это в файл определений шагов, который должен его использовать:

World(Devise::TestHelpers)

Хотя это делает методы sign_in и sign_out доступными, на самом деле их нельзя использовать в Cucumber, поэтому этот НЕ РАБОТАЕТ . В комментариях вверху файла devise написано «Не используйте Devise :: TestHelpers в интеграционных тестах». Смотри: https://github.com/plataformatec/devise/blob/master/lib/devise/test_helpers.rb

К сожалению, шаги огурца не имеют доступа к объекту веб-запроса и параметрам сеанса. Похоже, что единственный способ сделать это - многократно выполнять веб-запросы на вход в систему в начале каждого сценария. Скучный. Я нахожу странным, что cucumber может напрямую манипулировать базой данных приложения test rails, но не веб-запросом / сеансом. В любом случае, этот пост old показывает хороший пример шагов рефакторинга в модуле, который может быть легко разделен несколькими шагами: http://drnicwilliams.com/2009/04/15/cucumber-building-a-better-world-object/

Если у кого-то еще есть ответ на вопрос, как сценарий может установить состояние входа в систему без необходимости выполнять все веб-вызовы на капибару, я бы хотел услышать это.

0 голосов
/ 14 января 2017

Вы можете сделать это, чтобы заглушки войти в Cucumber: https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara

поместить строки в support / env.rb:

include Warden::Test::Helpers

After do Warden.test_reset! end

тогда вы можете сделать:

user = create :user login_as :user, scope: :user

НО , помощник login_as не перенаправляет вас на следующую страницу после входа в системуВы входите. Он просто регистрирует вас.

Таким образом, вы должны явно перейти на следующую страницу, которую вы тестируете как зарегистрированный пользователь.

Итак, вы должны сделать еще один шаг, чтобы явно сделать это,например, visit '/'

0 голосов
/ 01 мая 2013

Может помочь следующее: https://github.com/ngty/cross-stub - это позволяет заблокировать методы перекрестного процесса, что иногда необходимо для тестирования огурцов

...