在测试中强制Hackney请求超时

时间:2018-09-20 18:46:46

标签: elixir phoenix-framework ex-unit

我正在寻找一种能够在我的控制器测试中重现Hackney HTTP POST请求超时的方法。我也在使用ExVCR,但这似乎也不允许您强制请求超时。

我尝试在发出请求时将Hackney超时设置为1,但超时,但是我实际上不想在测试中发出请求。

我愿意使用模拟/存根,但是要确保我仍然可以在实际向集成服务发出请求的单元测试中使用ExVCR。我见过的所有模拟库和模式都会在整个测试环境中残缺整个模块,这不是我想要的。

以下是我提出的请求的一个示例:

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

我想返回{:error, :timeout},这是哈克尼在实际超时情况下返回的信息。

1 个答案:

答案 0 :(得分:0)

如果我对问题的理解正确,那么您希望: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上查询服务器。

希望我正确理解了这个问题