我有一个宏,它创建一个模块,一个模块的结构,并为该结构实现一个协议。
在我的套件中,我有一个简单的测试模块,它调用宏,然后对生成的模块/结构/协议实现进行断言。一个测试使用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
我现在已经删除了这个测试,因为我相信我的套件的其余部分已经充分测试了这个功能,但我很好奇是否有办法让这个功能再次起作用,或者至少让警告静音。
我和Process.consilodate/2
一起玩,但没有成功。
答案 0 :(得分:10)
从Elixir 1.2开始,Mix默认合并协议,这可能会导致此处描述的问题:
https://github.com/elixir-lang/elixir/blob/v1.2/CHANGELOG.md#workflow-improvements
听起来我觉得你对这个问题有不同的看法,但修复很可能是一样的。在项目配置中设置consolidate_protocols:false(仅当在测试环境中运行时)。