重新整合Elixir 1.2或更高版本中的协议

时间:2016-01-23 13:16:16

标签: 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

我现在已经删除了这个测试,因为我相信我的套件的其余部分已经充分测试了这个功能,但我很好奇是否有办法让这个功能再次起作用,或者至少让警告静音。

我和Process.consilodate/2一起玩,但没有成功。

1 个答案:

答案 0 :(得分:10)

从Elixir 1.2开始,Mix默认合并协议,这可能会导致此处描述的问题:

https://github.com/elixir-lang/elixir/blob/v1.2/CHANGELOG.md#workflow-improvements

听起来我觉得你对这个问题有不同的看法,但修复很可能是一样的。在项目配置中设置consolidate_protocols:false(仅当在测试环境中运行时)。