Простое тестирование авторизации Phoenix вошедшим в систему пользователем

Из этого учебник по простой аутентификации

Я хочу проверить маршруты приложения внутри :login_required конвейер (который просто проверяет, вызвал ли клиент Guardian.Plug.sign_in(conn, user))

Поскольку действие user_path show должно быть передано по конвейеру через конвейер :login_required, я бы подумал, что для проверки этого маршрута мне просто нужно будет написать следующее:

Auth.login_by_email_and_pass(conn, user.email, @password)

а затем передать conn, который выходит из этого, в:

get conn, user_path(conn, :show, user.id)

и убедитесь, что я получаю код состояния 200.

Но я не могу пройти строку Auth.login_by_email_and_pass(conn, email, password) и получаю ошибку:

session not fetched, call fetch_session/2

Где взять сессию?

Я пробовал bypass_through(conn, [:browser, :with_session])

Я бы подумал, что конвейер :browser вызывает fetch_session, что решило бы эту проблему.

Я также пытался вызывать fetch_session до и после, но все равно получаю ту же ошибку.


person Sam Houston    schedule 16.07.2017    source источник
comment
Попробуйте позвонить init_test_session/2, например: conn = conn |> init_test_session(%{}) |> Auth.login_by_email_and_pass(user.email, @password).   -  person Dogbert    schedule 16.07.2017
comment
@Dogbert Спасибо, точно, если вы опубликуете ответ, я приму его.   -  person Sam Houston    schedule 16.07.2017


Ответы (1)


Вы можете использовать Plug.Test.init_test_session/2 для инициализации сеанса. Поскольку вам не нужно вводить какие-либо данные, вы можете передать пустую карту в качестве второго аргумента.

conn = conn
  |> init_test_session(%{})
  |> Auth.login_by_email_and_pass(user.email, @password)
person Dogbert    schedule 16.07.2017