2016-01-23 69 views
7

我有一個宏創建一個模塊,一個模塊的結構,併爲該結構實現一個協議。Elixir 1.2或更高版本中的重新合併協議

在我的套件中,我有一個調用宏的簡單測試模塊,然後對生成的模塊/結構/協議實現進行斷言。一個測試使用該結構調用協議函數來聲明它已經實現。在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,但沒有成功。

回答

10

在花好月圓1.2開始,混合默認合併協議,這可能會導致此處描述的問題:

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

這聽起來像你對我有不同的味道同樣的問題,但修復很可能是一樣的。在您的項目配置中設置consolidate_protocols:false(僅在測試環境中運行時)。

+1

啊,我不知道'鞏固_協議'混合項目選項。謝謝。 – lpil

+0

只是爲了澄清,在'project'函數的'mix.exs'文件中混合項目選項是選項。如果你看到這個,你可能想要類似'def project,do:[consolidate_protocols:Mix.env!=:test]' – Astery

相關問題