在 Elixir 1.2 或更高版本中重新整合协议
Reconsolidate protocols in Elixir 1.2 or higher
我有一个宏,它创建一个模块,一个模块的结构,并为该结构实现一个协议。
在我的套件中,我有一个简单的测试模块,它调用宏,然后对生成的 module/struct/protocol 实现进行断言。一项测试使用结构调用协议函数以断言它已被实现。在 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
,但没有成功。
从 Elixir 1.2 开始,Mix 默认合并协议,这可能会导致此处描述的问题:
https://github.com/elixir-lang/elixir/blob/v1.2/CHANGELOG.md#workflow-improvements
在我看来,您对同一个问题有不同的看法,但解决方法很可能是相同的。在您的项目配置中设置 consolidate_protocols: false(仅在测试环境中设置 运行)。
我有一个宏,它创建一个模块,一个模块的结构,并为该结构实现一个协议。
在我的套件中,我有一个简单的测试模块,它调用宏,然后对生成的 module/struct/protocol 实现进行断言。一项测试使用结构调用协议函数以断言它已被实现。在 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
,但没有成功。
从 Elixir 1.2 开始,Mix 默认合并协议,这可能会导致此处描述的问题:
https://github.com/elixir-lang/elixir/blob/v1.2/CHANGELOG.md#workflow-improvements
在我看来,您对同一个问题有不同的看法,但解决方法很可能是相同的。在您的项目配置中设置 consolidate_protocols: false(仅在测试环境中设置 运行)。