【发布时间】:2021-02-13 02:03:33
【问题描述】:
我正在学习 Elixir 和 Phoenix 堆栈,我进入了一个使用 Hackney 模块 (erlang) 进行 http 调用的生产项目。这里的情况是我想模拟 hackney 的“请求”函数,所以当它被调用时,它会返回一个特定的响应。到目前为止,我已经四处奔波并登陆 Mox 库来实现这一点,但是由于 hackney 是一个 Erlang 模块,而 Mox 抱怨它不是一种行为,我想知道是否有更好的方法来做到这一点或者也许还有另一个缺少的配置。代码失败的地方是在模拟定义的开头:
Mox.defmock(MyApp.MockHackney, for: :hackney)
这只是失败了module :hackney is not a behaviour, please pass a behaviour to :for
我假设我做错了什么(我在这里关注 Mox 库的文档:https://hexdocs.pm/mox/Mox.html 了解行为是什么,我理解错误,问题是我不知道是否有办法为这个模拟“注入”行为定义给哈克尼,或者我使用了错误的工具来完成这项工作。任何想法将不胜感激,在此先感谢:)
【问题讨论】:
-
我认为为您的客户定义一种行为,将调用 hackney 包装起来是要走的路。然后你可以在你的测试中模拟这种行为。不过,我对此感到很挣扎,因为用您的自定义行为替换所有 http 调用并不完全可行。
-
我也想过这个,但是项目中散落着一堆hackney的东西,所以我只想模拟一个 :hackney.request 的响应来添加测试而不是打开它进行完整的重构:(
-
对于 StackOverflow 来说可能有点过于开放 - 试试 elixir 论坛。
-
“项目中散落着一堆乱七八糟的东西”——这已经是一个巨大的架构问题,我将从修复它开始。请参阅 hexdocs.pm/boundary/Boundary.html 了解原因和原因。