ブログから整形して転載。
マクロが自分が望んだ形に展開されているかテストする方法。
# lib/my_module.ex
defmodule MyModule do
defmacro my_macro do # テスト対象
quote do
... # 略
end
end
end
# test/test_helper.exs
ExUnit.start
defmodule TestHelper do
defmacro macro_to_code(macro) do
macro |> Macro.expand(__CALLER__) |> Macro.to_string
end
end
# test/my_module_test.exs
defmodule MyModuleTest do
use ExUnit.Case
import TestHelper
test "my_macro" do
expanded = macro_to_code(MyModule.my_macro) # 文字列が返る
assert expanded =~ ~r/.../
end
end
以下のようにすると、文字列ではなくASTが返ります。
defmacro macro_to_ast(macro) do
macro |> Macro.expand(__CALLER__) |> Macro.escape
end