0

我可以手动构建一个conn然后像函数一样调用它们吗?如果你不明白“他们”是什么意思,请看下面的代码。

例如,定义一条路线/ping

get "/ping" do
  send_resp(conn, 200, "pong")
end

我知道可以用中的conn函数来完成use Plug.Test,但是它是基于HTTP Client,而不是运行时函数调用,效率太低。

4

1 回答 1

1

正如您所说,标准方法是Plug.Test.conn/3用于构建一个%Plug.Conn{}结构,该结构将导致该路由被调用。

所有插件都有一个call/2功能,即在运行时可用的功能。

例子:

conn = Plug.Test.conn(:get, "/ping", "")
conn = YourModule.Router.call(conn, [])

get宏在编译编译为私有match/3函数,该函数本身由call/2函数调用,也需要conn结构体。因此,除非您从路由器模块内部调用,否则您必须使用call/2回调进行运行时测试。不使用 HTTP 客户端 - 它只是生成一个结构。我认为您对效率低下的担忧是没有根据的。match/3Plug.Test.conn/3

于 2019-02-19T02:01:26.703 回答