View Source Injexor

Injexor provides an easy way to replace modules based on behaviours for mocking during tests or stubbing in another module based on config for different environments.

See the docs for full instructions: https://hexdocs.pm/injexor

Installation

The package can be installed by adding injexor to your list of dependencies in mix.exs:

def deps do
  [
    {:injexor, "~> 1.0.0"}
  ]
end

Example test configuration:

  • test.exs

      config :injexor, default: Mock # adds Mock on the end of all modules by default
    
      # or you can alternatively register injects manually
      config :injexor, MyApp.MyBehaviour, inject: MyApp.Mock
  • test_helper.exs

      Hammox.defmock(MyApp.Mock, for: MyApp.MyBehaviour)
  • lib/my_app.ex

      defmodule MyApp do
        @behaviour MyApp.MyBehaviour
    
        def deploy_context() do
          Application.fetch_env!(:my_app, :deploy_context)
        end
      end
  • lib/my_app/my_behaviour.ex

      defmodule  MyApp.MyBehaviour do
        @callback deploy_context() :: atom()
      end
  • lib/my_app/module.ex

      defmodule MyApp.Module do
        use Injexor, inject: [MyApp]
    
        def my_function do
          # you can now use mox/hammox to stub/expect this function to test the different paths
          if MyApp.deploy_context() == "production" do
            # do something
          else
            # do something else
          end
        end
      end