Тайм-аут запроса Force Hackney в тесте
Я ищу способ воспроизвести тайм-аут запроса HTTP POST Hackney в одном из тестов моего контроллера. Я также использую ExVCR, но это, похоже, не позволяет вам принудительно установить тайм-аут запроса.
Я пытался установить время ожидания Hackney равным 1, когда я выполняю запрос, и оно истекло, но я не хочу фактически выполнять запрос в моем тесте.
Я был бы открыт для использования макета / заглушки, но хотел бы убедиться, что я все еще могу использовать ExVCR в модульных тестах, которые фактически делают запросы к сервису, с которым я интегрируюсь. Все фиктивные библиотеки и шаблоны, которые я видел, заглушают весь модуль для всей тестовой среды, а это не то, что мне нужно.
Вот пример запроса, который я делаю:
:hackney.post(url, [timeout: 1], body, get_auth())
и я хотел бы это вернуть {:error, :timeout}
это то, что Хэкни возвращает в сценарии реального времени.
1 ответ
Если я правильно понял вопрос, вы хотите :hackney
тайм-аут во время теста
Если вы не хотите делать запрос, лучше создать макрос, который будет выполнять разные коды между тестированием и производством.
Если вы хотите создать сервер, который может вызвать тайм-аут: вы можете создать маршрутизатор, который займет некоторое время, чтобы ответить с
Plug.Router
модуль.
Например, с помощью следующего кода:
defmodule MyRouter do
use Plug.Router
plug(:match)
plug(:dispatch)
post _ do
:timer.sleep(2000)
send_resp(conn, 200, "ok")
end
end
Обязательно запустите роутер с помощью команды Plug.Adapters.Cowboy.child_spec(:http, MyRouter, [], [port: 4000])
Вы можете запросить сервер по адресу 127.0.0.1:4000/
с вашим :hackney
команда.
Надеюсь, я правильно понял вопрос