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.
super
andreal
to help you call real implementations of the module.Works with other test frameworks and even in non-testing environments like
iex
or remote shell.
Installation
def deps do
[
{:repatch, "~> 1.0"}
]
end
One-minute intro
for ExUnit users
Add
Repatch.setup()
into yourtest_helper.exs
file after theExUnit.start()
use Repatch.ExUnit
in your test moduleCall
Repatch.patch
orRepatch.fake
to 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
end
Further 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
.