我可以手动构建一个conn
然后像函数一样调用它们吗?如果您不明白“它们”的含义,请查看下面的代码。
例如,定义路线/ping
get "/ping" do
send_resp(conn, 200, "pong")
end
我知道可以使用conn
中的use Plug.Test
函数来完成此操作,但是它基于HTTP客户端,而不是运行时函数调用,效率太低。
答案 0 :(得分:1)
正如您所说,标准方法是使用Plug.Test.conn/3
来构建一个%Plug.Conn{}
结构,该结构将导致该路由被调用。
所有插头都具有call/2
函数,该函数在运行时可用。
示例:
conn = Plug.Test.conn(:get, "/ping", "")
conn = YourModule.Router.call(conn, [])
get
宏在编译时是compiled到私有的match/3
函数,该函数本身由call/2
函数调用,还需要{{1} }结构。因此,除非您从路由器模块内部调用conn
,否则必须使用call/2
回调进行运行时测试。 match/3
不使用HTTP客户端-只是生成一个结构。我认为您对效率低下的担忧是没有根据的。