Интеграционный тест потерял зарегистрированного пользователя после перенаправления - PullRequest
0 голосов
/ 25 ноября 2018

Я использую devise для управления процессом аутентификации.Сейчас я занимаюсь разработкой интеграционных тестов для своего приложения, начиная с процесса входа в систему.

RSpec.describe 'sign in', type: :feature, js: true do
  let!(:user) { create(:user)}

  scenario 'sign in with correct credentials' do
    visit new_user_session_path
    fill_in 'Login', with: 'email@email.com'
    fill_in 'Password', with: 'password'
    click_on 'Sign in'
    expect(current_path).to eq(signed_in_path)
  end
end

После того, как в приведенном выше тесте нажимается кнопка «Войти», сеанс создается, как предполагалось, и затем пользовательперенаправлен на signed_in_path.После этого перенаправления вызывается контроллер для этого пути, и он имеет before_action :authenticate_user.

Проблема в том, что после перенаправления этот метод authenticate_user больше не распознает current_user, что делает егоперенаправить обратно на страницу входа и вызвать сбой теста.

Что вызывает потерю сеанса?Как я могу это исправить?

PS: я включил config.include Devise::Test::IntegrationHelpers, type: :feature в свой rails_helper.rb, и помощник sign_in прекрасно работает, но я не должен использовать это для проверки, если знак страницыработает правильно.

1 Ответ

0 голосов
/ 25 ноября 2018

Здесь есть несколько потенциальных проблем, но наиболее вероятным является то, что click_on не ожидает каких-либо действий, вызванных щелчком (поскольку у него нет возможности узнать, какими будут эти действия).Вот почему большинство (если не все) средств поиска / совпадений / утверждений / и т.д. Capybara имеют встроенные функции ожидания / повторной попытки, чтобы дать сайту / приложению время для того, чтобы что-то произошло.Проблема в том, что вы не используете средство сопоставления, предоставленное Capybara, поэтому ваше ожидание сразу же завершается ошибкой, тесты заканчиваются, и соединение с базой данных очищается (возможно, во время перенаправления пользователя).Чтобы исправить это, вы всегда должны использовать предоставленные Capybara соответствия при работе с возвращаемыми Capybara значениями / объектами (т.е. никогда не используйте eq с текущим путем)

expect(page).to have_current_path(signed_in_path)

Второй потенциал (или может быть и тем и другим)если перенаправляемый домен не совпадает с именем входа в домен.Например, если вход в систему происходит на http://127.0.0.1/..., а перенаправление - на http://localhost..., тогда cookie сеанса будет установлен для неправильного домена, и пользователь больше не будет входить в систему.

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