Тестовый пример контроллера Phoenix теряет current_user - PullRequest
0 голосов
/ 01 мая 2018

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

У меня есть код настройки, который назначает пользователя прибора перед каждым тестом:

setup %{conn: conn} = config do
  if username = config[:login_as] do
    user = insert_user(username: username)
    conn = assign(conn, :current_user, user)
    {:ok, conn: conn, user: user}
  else
    :ok
  end
end

Все мои тесты, которые происходят в области входа в систему, имеют тег login_as: "username".

@tag login_as: "max"
test "redirects to show when data is valid", %{conn: conn} do
  conn = post conn, debit_event_path(conn, :create), debit_event: @create_attrs

  assert %{id: id} = redirected_params(conn)
  assert redirected_to(conn) == debit_event_path(conn, :show, id) #1

  conn = get conn, debit_event_path(conn, :show, id) 
  assert html_response(conn, 200) =~ "Show Debit event" #2
end

Первое утверждение (комментарий # 1 в коде) всегда работает, но по какой-то причине второе утверждение (комментарий # 2 в коде) не выполняется, и оно ведет себя так, как будто мое пользователь вышел из системы. Это происходит во всех случаях, когда мне нужно сохранить пользователя между запросами.

Существует ли правильный подход для сохранения этих данных в запросах на тестирование, поскольку это был запрос браузера?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Я столкнулся с подобной проблемой, комментарии Павла помогли мне ... так что с вашим примером выше, основываясь на ответе Павла, вы могли бы сделать что-то подобное ниже, и вы должны быть хорошими.

  @tag login_as: "max"
  test "redirects to show when data is valid", %{conn: conn} do
    create_conn = post conn, debit_event_path(conn, :create), debit_event: @create_attrs

    assert %{id: id} = redirected_params(create_conn)
    assert redirected_to(create_conn) == debit_event_path(create_conn, :show, id) #1

    show_conn = get conn, debit_event_path(conn, :show, id)
    assert html_response(show_conn, 200) =~ "Show Debit event" #2
  end
0 голосов
/ 04 мая 2018

Phoenix эмулирует файлы cookie браузера для использования Переработка

Переработка

Браузеры реализуют хранилище с помощью файлов cookie. Когда файл cookie установлен в ответ, браузер сохраняет его и отправляет в следующем запросе.

Чтобы эмулировать это поведение, этот модуль предоставляет идею утилизации. рецикл / 1 Функция получает соединение и возвращает новое соединение, аналогично на тот, который был возвращен conn / 0 со всеми файлами cookie от предыдущее соединение определено как заголовки запроса. Это полезно, когда тестирование нескольких маршрутов, для которых требуются файлы cookie или сеанс.

Так что, если вы хотите сохранить пользователя между запросами в тестах, вам нужно сохранить user_id в сеансе.

...