Тайм-аут запроса 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 команда.

Надеюсь, я правильно понял вопрос

Другие вопросы по тегам