Феникс: Как получить conn %Plug.Conn{} в консоли

После

iex -S mix phx.server

Я хочу провести несколько быстрых тестов в терминале iex, но некоторые функции требуют в качестве аргумента struct %Plug.Conn{}, например, я хотел получить результат выражения:

MyAppWeb.Router.Helpers.confirmation_url(%Plug.Conn{}, :edit, "12345")

Но у меня есть ошибка:

Phoenix endpoint not found in %{}

Есть ли простой способ получить conn struct в консоли?

3 ответа

Решение

Вспомогательные функции маршрутизатора принимают в качестве первого аргумента модуль conn или модуль конечной точки. Вы можете передать модуль конечной точки своего приложения, когда вы хотите сгенерировать URL без подключения:

MyAppWeb.Router.Helpers.confirmation_url(MyAppWeb.Endpoint, :edit, "12345")

Редактировать: если вы хотите создать фиктивный коннект, который работает с помощниками маршрутизатора, кажется, что достаточно поставить %{phoenix_endpoint: MyAppWeb.Endpoint} значение в conn.private по состоянию на Феникс 1.3:

conn = %Plug.Conn{private: %{phoenix_endpoint: MyAppWeb.Endpoint}}
MyAppWeb.Router.Helpers.confirmation_url(conn, :edit, "12345")

Помощники по тестированию ConnCase используют Phoenix.ConnTest.build_conn() загрузить структуру соединения для тестов контроллера.

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

Зачем проводить время с тестированием на консоли. Просто напишите тест и используйте "ConnCase", который дает вам структуру conn в ваших тестах бесплатно. Во время разработки вы также можете использовать пакет "test watch", который будет перезапускать ваши тесты при каждом изменении файла.

Как только вы переключитесь на TDD, вы сэкономите больше времени на таких проблемах.

Другие вопросы по тегам