2016-08-04 4 views
1

ErckでMeckがこの機能を提供するのと同じ方法で、ExUnit Mockで一連の戻り値を模擬することは可能ですか?ExUnit模擬シーケンス

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

ない場合は、それが成功し、同じユニットテストExUnitエリクサーモジュールにメックやモックを組み合わせることが可能ですか?

答えて

1

:meck.sequenceにはmock.exがありませんので、まだサポートされていないと思います。

Mock.with_mockコールの外にある限り、:meck機能を直接呼び出すことができます。完了したら:meck.unload/1に電話してください。 (モックが必要とするので、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 

デモ:

$ mix test 
. 

Finished in 0.2 seconds 
1 test, 0 failures