Как мне вызвать маршрут, определенный макросом Plug.Router во время выполнения? - PullRequest
0 голосов
/ 19 февраля 2019

Могу ли я вручную построить conn и затем вызывать их как функцию?Если вы не понимаете, что означает «они», посмотрите на код ниже.

Например, определите маршрут /ping

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

Я знаю, что это можно сделать с помощьюфункция conn в use Plug.Test, но она основана на HTTP-клиенте, а не на вызове функции времени выполнения, что слишком неэффективно.

1 Ответ

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

Стандартный способ, как вы сказали, использовать 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 для тестирования во время выполнения, если только вы не вызываете match/3 из своего модуля маршрутизатора.Plug.Test.conn/3 не использует HTTP-клиент - он просто создает структуру.Я думаю, что ваши опасения по поводу неэффективности являются необоснованными.

...