I have a simple GenServer making an HTTP request
defmodule GamePlay do
use GenServer
alias Wrapper
def start_link(_args) do
GenServer.start_link(__MODULE__, %{}, name: __MODULE__)
end
def init(state) do
{:ok, state, {:continue, :put_mapping}}
end
def handle_continue(:put_mapping, state) do
mapping = %{
"index_patterns" => ["game_play-*"]
}
config = Application.get_env(:search_flask, :elasticsearch_seeds, [])
if Keyword.get(config, :enabled?, true) do
Wrapper.create_template_mappings("game_play", mapping)
end
{:noreply, state}
end
end
and I am trying to put to test using Req, in Wrapper, I am sending an HTTP request using Req. but it only works once when I delete _build/test folder after that it stops working
defmodule GamePlayTest do
use ExUnit.Case, async: true
alias GamePlay
alias Wrapper
describe "GamePlay" do
setup do
on_exit(fn ->
Req.Test.verify_on_exit!()
end)
:ok
end
test "sends the correct request to Elasticsearch" do
Req.Test.stub(Wrapper, fn conn ->
Req.Test.json(
conn,
%{"acknowledged" => true}
)
end)
assert {:ok, pid} = GamePlay.start_link(%{})
assert %Req.Response{body: %{"acknowledged" => true}, status: 200} =
Req.get!(Application.get_env(:search_flask, :elasticsearch_req_options, []))
end
end
end
I have this in test.exs as well.
config :search_flask,
elasticsearch_req_options: [
plug: {Req.Test, Wrapper}
]
the is the error.
** (EXIT from #PID<0.570.0>) an exception was raised:
** (RuntimeError) cannot find mock/stub Wrapper in process #PID<0.571.0>
(req 0.5.6) lib/req/test.ex:399: Req.Test.__fetch_plug__/1
(req 0.5.6) lib/req/test.ex:632: Req.Test.call/2
(req 0.5.6) lib/req/steps.ex:927: Req.Steps.run_plug/1
(req 0.5.6) lib/req/request.ex:1103: Req.Request.run_request/1
(req 0.5.6) lib/req/request.ex:1047: Req.Request.run/1
(search_flask 1.3.0) lib/game_play.ex:47: GamePlay.handle_continue/2
(stdlib 6.0) gen_server.erl:2163: :gen_server.try_handle_continue/3
(stdlib 6.0) gen_server.erl:2072: :gen_server.loop/7
(stdlib 6.0) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
the test is simple as well but it only reaches to Wrapper.create_template_mappings
only once after that it just keep failing.