diff --git a/lib/mimic.ex b/lib/mimic.ex index 49b1790..72e22c9 100644 --- a/lib/mimic.ex +++ b/lib/mimic.ex @@ -359,7 +359,12 @@ defmodule Mimic do with :ok <- ensure_module_not_copied(module), {:module, module} <- Code.ensure_compiled(module), :ok <- Mimic.Server.mark_to_copy(module) do - ExUnit.after_suite(fn _ -> Mimic.Server.reset(module) end) + if ExUnit.configuration()[:repeat_until_failure] do + ExUnit.after_suite(fn _ -> Mimic.Server.soft_reset(module) end) + else + ExUnit.after_suite(fn _ -> Mimic.Server.reset(module) end) + end + :ok else {:error, {:module_already_copied, _module}} -> diff --git a/lib/mimic/server.ex b/lib/mimic/server.ex index d7bb1e3..afe9ba1 100644 --- a/lib/mimic/server.ex +++ b/lib/mimic/server.ex @@ -90,6 +90,11 @@ defmodule Mimic.Server do GenServer.call(__MODULE__, {:reset, module}, @long_timeout) end + @spec soft_reset(module) :: :ok + def soft_reset(module) do + GenServer.call(__MODULE__, {:soft_reset, module}, @long_timeout) + end + @spec mark_to_copy(module) :: :ok | {:error, {:module_already_copied, module}} def mark_to_copy(module) do GenServer.call(__MODULE__, {:mark_to_copy, module}, @long_timeout) @@ -429,6 +434,11 @@ defmodule Mimic.Server do {:reply, :ok, %{state | verify_on_exit: MapSet.put(state.verify_on_exit, pid)}} end + def handle_call({:soft_reset, _module}, _from, state) do + state = %{state | expectations: %{}, stubs: %{}, mode: :private, global_pid: nil} + {:reply, :ok, state} + end + def handle_call({:reset, module}, _from, state) do state = %{state | modules_to_be_copied: MapSet.delete(state.modules_to_be_copied, module)} diff --git a/test/dsl_test.exs b/test/dsl_test.exs index fa63516..2b920d3 100644 --- a/test/dsl_test.exs +++ b/test/dsl_test.exs @@ -1,7 +1,9 @@ defmodule Mimic.DSLTest do - use ExUnit.Case, async: true + use ExUnit.Case, async: false use Mimic.DSL + setup :set_mimic_private + test "basic example" do stub(Calculator.add(_x, _y), do: :stub) expect Calculator.add(x, y), do: x + y diff --git a/test/mimic_test.exs b/test/mimic_test.exs index b2788d2..b535362 100644 --- a/test/mimic_test.exs +++ b/test/mimic_test.exs @@ -1,5 +1,5 @@ defmodule Mimic.Test do - use ExUnit.Case, async: true + use ExUnit.Case, async: false import Mimic describe "no stub or expects private mode" do