Phoenix:如何在控制台中获取 conn %Plug.Conn{}

Phoenix: How to get conn %Plug.Conn{} in the console

之后

iex -S mix phx.server

我想在 iex 终端做一些快速测试,但是有些函数需要结构 %Plug.Conn{} 作为参数,例如我想得到表达式的结果:

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

但是我有错误:

Phoenix endpoint not found in %{}

是否有一种在控制台中获取 conn struct 的简单方法?

路由器辅助函数接受 conn 或端点模块作为第一个参数。当你想生成一个 URL 没有 conn:

时,你可以传递你的应用程序的端点模块
MyAppWeb.Router.Helpers.confirmation_url(MyAppWeb.Endpoint, :edit, "12345")

编辑:如果你想创建一个与 Router helpers 一起工作的虚拟 conn,从 Phoenix 1.3 开始,在 conn.private 中放置一个 %{phoenix_endpoint: MyAppWeb.Endpoint} 值似乎就足够了:

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

为什么要花时间在控制台上进行测试。只需编写一个测试并使用 'ConnCase' 即可免费为您提供测试中的 conn 结构。在开发过程中,您还可以使用 "test watch" 包,它将在每次文件更改时重新运行测试。

一旦您切换到 tdd 的时间越长,您就会遇到这样的问题

ConnCase 测试助手使用 Phoenix.ConnTest.build_conn() 到 bootstrap 控制器测试的连接结构。

您可以找到函数 here 并直接使用它或按照其实现并根据需要进行调整。