Тайм-аут запроса Force Hackney в тесте - PullRequest
0 голосов
/ 20 сентября 2018

Я ищу способ воспроизвести тайм-аут запроса HTTP POST Hackney в одном из тестов моего контроллера.Я также использую ExVCR, но это, похоже, не позволяет вам принудительно устанавливать тайм-аут запроса.

Я пытался установить тайм-аут Хакни на 1, когда я делаю запрос, и он истекает,но я не хочу фактически делать запрос в моем тесте.

Я был бы открыт для использования макета / заглушки, но хочу убедиться, что я все еще могу использовать ExVCR в модульных тестах, которые на самом деледелать запросы к сервису, с которым я интегрируюсь.Все фиктивные библиотеки и шаблоны, которые я видел, заглушают весь модуль для всей тестовой среды, а это не то, что мне нужно.

Вот пример запроса, который я делаю:

:hackney.post(url, [timeout: 1], body, get_auth())

и я хотел бы, чтобы это вернуло {:error, :timeout}, и именно это Хакни возвращает в сценарии реального времени.

1 Ответ

0 голосов
/ 21 сентября 2018

Если я правильно понял вопрос, вы хотите, чтобы :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.

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

...