#elixir #finch
#elixir #finch
Вопрос:
Мой проект использует Finch для выполнения параллельных HTTP-запросов.
Я пытался добавить обход в свои тесты, но HTTP-запросы не обнаруживаются. Когда я запускаю тест, я получаю эту ошибку:
No HTTP request arrived at Bypass
Вот мой тест:
defmodule MyClientTest do
use ExUnit.Case, async: true
setup do
bypass = Bypass.open()
{:ok, bypass: bypass}
end
describe "list_apps" do
test "should have an expected app", %{bypass: bypass} do
{:ok, contents} = File.read("test/apps.json")
Bypass.expect(
bypass,
fn conn ->
Plug.Conn.resp(conn, 200, contents)
end
)
list_apps = MyClient.list_apps()
assert length(list_apps) == 57
end
end
end
Вот мой модуль MyClient:
defmodule MyClient do
alias Finch.Response
def child_spec do
{Finch,
name: __MODULE__,
pools: %{
"https://myapp.com" => [size: 100]
}}
end
def applications_response do
:get
|> Finch.build("https://myapp.com/v2/apps.json")
|> Finch.request(__MODULE__)
end
def handle_applications_response({:ok, %Response{body: body}}) do
body
|> Jason.decode!()
end
end
def list_apps do
handle_applications_response(applications_response())
end
end
Комментарии:
1. Я никогда не использовал байпас, но взглянул на документы… вы запустили приложение обхода в своем
test/test_helper.exs
?
Ответ №1:
Байпас не принимает HTTP-соединение, независимо от того, какой URI вы нажмете. Он настраивает тестовый сервер на localhost на случайном порту. Вам нужно получить этот порт (bypass.port), создать URI локального хоста, используя его, и передать этот URI в ваш тест, который будет вызван.