Skip to content

Latest commit

 

History

History
73 lines (54 loc) · 1.47 KB

README.md

File metadata and controls

73 lines (54 loc) · 1.47 KB

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