gpt4 book ai didi

testing - 如何用 Mox 模拟 HTTPoison?

转载 作者:行者123 更新时间:2023-11-28 21:19:14 24 4
gpt4 key购买 nike

背景

我有一个库,它使用 HTTPoison 来实现我需要测试的某些功能。为此,我使用 Mox ,我相信它是 Elixir 的通用模拟库(尽管还有其他这个库有 José Valim 的批准印章)

问题

一切顺利,我在 test_helpers.exs 中定义了我的模拟:

    ExUnit.start()
Mox.defmock(HTTPoisonMock, for: HTTPoison)

然后我设置了虚拟测试:

defmodule Alfred.Test.Http.Test do
use ExUnit.Case, async: true
import Mox
# Make sure mocks are verified when the test exits
setup :verify_on_exit!

describe "get" do
test "works on OK" do
HTTPoisonMock
|> get(:get, fn _ -> 1 end)

assert HTTPoisonMock.get(1) == 1
end
end
end

这里的问题是我无法运行它们:

module HTTPoison is not a behaviour, please pass a behaviour to :for

模拟契约(Contract),而不是实现

现在,我知道 José Valim 支持这种意识形态,因此我们应该模拟的一切都应该有一个契约。但是 HTTPoison 不是我的,也没有。所以这让我想到了以下问题:

  • 我如何模拟不使用 Mox 提供行为的第 3 个库?

最佳答案

HTTPPoison uses the behaviour HTTPoison.Base ,因此在这种特殊情况下,您已经准备就绪。


How can I mock 3rd libraries that don’t offer behaviours using Mox?

通常,我们通过依赖注入(inject)来做到这一点。每当您需要第 3 方时,只需将其作为参数传递并在测试环境中传递另一个模块/模拟。

关于testing - 如何用 Mox 模拟 HTTPoison?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54195640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com