lpi*_*pil 7 metaprogramming elixir
我有一个宏,它创建一个模块,一个模块的结构,并实现该结构的协议.
在我的套件中,我有一个简单的测试模块,它调用宏,然后在生成的模块/结构/协议实现上进行断言.一个测试使用struct调用协议函数来断言它已经实现.在1.2之前,这有效,但现在它失败了,运行套件时我收到以下警告.
test/dogma/rule_builder_test.exs:7: warning: the Dogma.Rule \
protocol has already been consolidated, an implementation for \
Dogma.RuleBuilderTest.MagicTestRule has no effect
Run Code Online (Sandbox Code Playgroud)
我现在已经删除了这个测试,因为我相信我的套件的其余部分已经充分测试了这个功能,但是我很好奇是否有办法让这个功能再次运行,或者至少让警告静音.
我玩过Process.consilodate/2,但没有成功.
小智 10
从Elixir 1.2开始,Mix默认合并协议,这可能会导致此处描述的问题:
https://github.com/elixir-lang/elixir/blob/v1.2/CHANGELOG.md#workflow-improvements
听起来我觉得你对这个问题有不同的看法,但修复很可能是一样的.在项目配置中设置consolidate_protocols:false(仅在测试环境中运行时).