Elixir ExUnit模拟序列
是否可以像meck在Erlang中提供此功能一样,使用ExUnit mock模拟返回值序列Elixir ExUnit模拟序列,elixir,ex-unit,Elixir,Ex Unit,是否可以像meck在Erlang中提供此功能一样,使用ExUnit mock模拟返回值序列 ... meck:new(my_module), meck:sequence(my_module, method, 1, [Response1, Response2]), meck:unload(module), ... 如果没有,是否可以在同一个单元测试ExUnit Elixir模块中成功地结合meck和mock?中没有提到:meck.sequence,因此我猜这还不受支持 直接调用:meck函数应该
...
meck:new(my_module),
meck:sequence(my_module, method, 1, [Response1, Response2]),
meck:unload(module),
...
如果没有,是否可以在同一个单元测试ExUnit Elixir模块中成功地结合meck和mock?中没有提到
:meck.sequence
,因此我猜这还不受支持
直接调用:meck
函数应该可以,只要它在Mock.with_Mock
调用之外,并且确保在完成后调用:meck.unload/1
。(并且您使用async:false
,正如Mock已经要求的那样。)即使在相同的测试中,这也应该可以
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
演示:
$ mix test
.
Finished in 0.2 seconds
1 test, 0 failures