【发布时间】:2019-01-15 09:04:43
【问题描述】:
背景
我有一个库,它使用 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
这里的问题是我无法运行它们:
模块 HTTPoison 不是行为,请将行为传递给 :for
模拟合同,而不是实现
现在,我知道 José Valim 支持这种意识形态,因此我们应该模拟的一切都应该有一个合同。但是 HTTPoison 不是我的,也没有。所以这让我想到了以下问题:
- 如何使用 Mox 模拟不提供行为的第三个库?
【问题讨论】:
标签: testing elixir httpoison mox