Skip to content

Latest commit

 

History

History
55 lines (39 loc) · 1.05 KB

MIGRATION_TO_OTP21.md

File metadata and controls

55 lines (39 loc) · 1.05 KB

Migration to Erlang/OTP21

Tuple calls

Due to this PR erlang/otp#1499, it is now necessary to add @compile :tuple_calls in every module where old Mockery API was used.

So, for example, most efficient way to make this

defmodule MyProject do
  @foo Mockery.of("Foo")

  def bar, do: @foo.bar()
  def baz, do: @foo.baz()
end

works as expected after OTP upgrade is

defmodule TupleCalls do
  defmacro __using__(_opts) do
    if function_exported?(Mix, :env, 0) && Mix.env() == :test do
      quote do: @compile(:tuple_calls)
    end
  end
end

defmodule MyProject do
  use TupleCalls

  @foo Mockery.of("Foo")

  def bar, do: @foo.bar()
  def baz, do: @foo.baz()
end

This reenables tuple calls only for :test environment.

Macro-based alternative

For those who prefer not to reenable tuple calls, there is a new macro-based API.

Previous example rewritten to use macros:

defmodule MyProject do
  use Mockery.Macro

  def bar, do: mockable(Foo).bar()
  def baz, do: mockable(Foo).baz()
end