Rewire (rewire v0.3.3) View Source
Rewire is a libary for replacing hard-wired dependencies of the module your unit testing. This allows you to keep your production code free of any unit testing-specific concerns.
Usage
# this module has a hard-wired dependency on the `English` module
defmodule Conversation do
def start(), do: English.greet()
end
If you define the following mox
mock:
# defining the mock in test_helper.exs
Mox.defmock(EnglishMock, for: English)
You can rewire the dependency in your unit test:
defmodule MyTest do
use ExUnit.Case
use Rewire
import Mox
# rewire dependency on `English` to `EnglishMock`
rewire Conversation, English: EnglishMock
test "greet" do
stub(EnglishMock, :greet, fn -> "g'day" end)
assert Conversation.start() == "g'day" # using the mock!
end
end
You can also give the alias a different name using as
:
rewire Conversation, English: EnglishMock, as: SmallTalk
Alternatively, you can also rewire a module on a test-by-test basis:
defmodule MyTest do
use ExUnit.Case
use Rewire
import Mox
test "greet" do
rewire Conversation, English: EnglishMock do
# within the block `Conversation` is rewired
stub(EnglishMock, :greet, fn -> "g'day" end)
assert Conversation.start() == "g'day" # using the mock!
end
end
end
You can also give the alias a different name using as
:
rewire Conversation, English: Mock, as: SmallTalk
Link to this section Summary
Functions
Macro that allows to rewire (and alias) a module.
Macro that allows to rewire a module within a block.
Link to this section Functions
Macro that allows to rewire (and alias) a module.
use Rewire
rewire App.ModuleToRewire, ModuleDep: Mock
# `ModuleToRewire` will use `Mock` now
end
Options
opts
is a keyword list:
as
- give the rewired module a different nameany other item, like
ModuleDep: Mock
, will be interpreted as a mapping from one module to another
Macro that allows to rewire a module within a block.
use Rewire
rewire App.ModuleToRewire, ModuleDep: Mock do
# `ModuleToRewire` will use `Mock` now
end
See rewire/2
for a description of options.