ExUnit模拟序列

时间:2016-08-04 15:13:01

标签: elixir ex-unit

是否可以使用ExUnit Mock模拟一系列返回值,就像meck在Erlang中提供此功能一样?

...
meck:new(my_module),
meck:sequence(my_module, method, 1, [Response1, Response2]),
meck:unload(module),
...

如果没有,是否可以在相同的单元测试ExUnit Elixir模块中成功组合meck和mock?

1 个答案:

答案 0 :(得分:2)

mock.ex中没有提到totalFoodTypes所以我猜这还不支持。

只要在:meck.sequence电话之外,就可以直接拨打:meck个功能,并确保在完成后致电Mock.with_mock。 (并且你使用:meck.unload/1,就像Mock已经要求的那样。)即使在同一个测试中,这也应该没问题。

async: false

演示:

test "the truth" do
  url = "http://www.google.com"

  :meck.new(HTTPoison)
  :meck.sequence(HTTPoison, :get!, 1, [%{body: "foo"}, %{body: "bar"}])
  assert HTTPoison.get!(url).body == "foo"
  assert HTTPoison.get!(url).body == "bar"
  assert HTTPoison.get!(url).body == "bar"
  :meck.unload(HTTPoison)

  assert HTTPoison.get!(url).body =~ "HTML"

  with_mock HTTPoison, [get!: fn(_url) -> %{body: "baz"} end] do
    assert HTTPoison.get!(url).body == "baz"
  end

  assert HTTPoison.get!(url).body =~ "HTML"
end