diff --git a/lib/req/test.ex b/lib/req/test.ex index db79af71..8d5ffe78 100644 --- a/lib/req/test.ex +++ b/lib/req/test.ex @@ -218,6 +218,26 @@ defmodule Req.Test do @doc false def call(conn, stub_name) do - stub(stub_name).(conn) + case stub(stub_name) do + fun when is_function(fun) -> + fun.(conn) + + module when is_atom(module) -> + module.call(conn, module.init([])) + + {module, options} when is_atom(module) -> + module.call(conn, module.init(options)) + + other -> + raise """ + expected stub to be one of: + + * 0-arity function + * module + * {module, options} + + got: #{inspect(other)}\ + """ + end end end diff --git a/test/req/test_test.exs b/test/req/test_test.exs index 98ecb6d0..ddf9a14f 100644 --- a/test/req/test_test.exs +++ b/test/req/test_test.exs @@ -22,12 +22,25 @@ defmodule Req.TestTest do assert Req.Test.stub(:foo) == 2 end - test "plug" do - Req.Test.stub(:foo, fn conn -> - Plug.Conn.send_resp(conn, 200, "hi") - end) + describe "plug" do + test "function" do + Req.Test.stub(:foo, fn conn -> + Plug.Conn.send_resp(conn, 200, "hi") + end) + + assert Req.get!(plug: {Req.Test, :foo}).body == "hi" + end - assert Req.get!(plug: {Req.Test, :foo}).body == "hi" + test "module" do + defmodule Foo do + def init(options), do: options + def call(conn, []), do: Plug.Conn.send_resp(conn, 200, "hi") + end + + Req.Test.stub(:foo, Foo) + + assert Req.get!(plug: {Req.Test, :foo}).body == "hi" + end end describe "allow/3" do