View Source Repatch
Repatch is a library for efficient, ergonomic and concise mocking/patching in tests (or not tests)
Features
Patch any function or macro (except NIF and BIF). You can even patch and call private functions in test, or Erlang modules
Designed to work with
async: true. Has 3 isolation levels for testing multi-processes scenarios.Does not require any explicit boilerplate or DI. Though, you are completely free to use it with Repatch!
Powerful call history tracking.
superandrealto help you call real implementations of the module.Works with other test frameworks and even in non-testing environments like
iexor remote shell.
Installation
def deps do
[
{:repatch, "~> 1.0"}
]
endOne-minute intro
for ExUnit users
Add
Repatch.setup()into yourtest_helper.exsfile after theExUnit.start()use Repatch.ExUnitin your test moduleCall
Repatch.patchorRepatch.faketo change implementation of any function and any module.
For example
defmodule ThatsATest do
use ExUnit.Case, async: true
use Repatch.ExUnit
test "that's not a MapSet.new" do
Repatch.patch(MapSet, :new, fn ->
%{thats_not: :a_map_set}
end)
assert MapSet.new() == %{thats_not: :a_map_set}
assert Repatch.called?(MapSet, :new, 1)
end
endFurther reading
Please check out the docs for all available features.
Special thanks
To ihumanable for Patch library which was an inspiration and a good example for Repatch.