2

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

我尝试在发出请求时将哈克尼超时设置为 1,但它超时,但我不想在测试中实际发出请求。

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

这是我正在提出的请求的示例:

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

我希望这个返回{:error, :timeout},这是哈克尼在真正的超时场景中返回的。

4

1 回答 1

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

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

于 2018-09-21T11:09:55.060 回答