首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Mox模拟HTTPoison?

如何用Mox模拟HTTPoison?
EN

Stack Overflow用户
提问于 2019-01-15 09:04:43
回答 1查看 593关注 0票数 1

背景

我有一个库,它使用HTTPoison作为我需要测试的一些功能。为了实现这一目标,我使用了Mox,我相信它是针对长生不老药的通用模拟库(尽管还有其他库,但这个库具有JoséValim的认可印章)。

问题

一切都很好,我在test_helpers.exs中定义了我的模拟

代码语言:javascript
复制
    ExUnit.start()
    Mox.defmock(HTTPoisonMock, for: HTTPoison)

我设置了我的虚拟测试:

代码语言:javascript
复制
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不是行为,请将行为传递给:

模拟契约,而不是实现

现在,我知道JoséValim支持这种思想,因此我们应该嘲笑的一切都应该有一个合同。但HTTPoison不是我的,它也没有。因此,我要提出以下问题:

  • 我怎么能模仿不提供使用Mox的行为的第三个库呢?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 09:13:17

HTTPoison 利用这种行为 HTTPoison.Base,所以在这个特殊情况下,您已经做好了准备。

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

通常,我们是通过依赖注入来实现这一点的。当您需要第三方时,只需将其作为参数传递,并在测试环境中传递另一个模块/模拟。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54195640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档