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

Link to this macro

rewire(arg, opts)

View Source (macro)

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 name

  • any other item, like ModuleDep: Mock, will be interpreted as a mapping from one module to another

Link to this macro

rewire(arg, opts, list)

View Source (macro)

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.