2016-01-23 14 views
7

Modül için bir modül oluşturan bir makro var ve bu yapı için bir protokol uygular.Elixir 1.2 veya daha yüksek sürümlerdeki protokolleri yeniden güncelleştirme

Paketimde, makroyu çağıran basit bir test modülüne sahibim ve sonra oluşturulan modül/struct/protocol uygulamasıyla ilgili iddialar yapıyorum. Bir test, protokol işlevinin uygulandığını ileri sürmek için struct ile çağırır. 1.2'den önce bu işe yaradı, ama şimdi başarısız oluyor ve paketi çalıştırırken aşağıdaki uyarıyı alıyorum. Bu işlevsellik yeterince benim paketi testlerinin kalanını inanıyorum

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 

Ben, şimdilik bu testi kaldırdık, ama merak ediyorum tekrar bu işi yapmak için bir yolu varsa, ya da en azından sessizlik uyarısı az .

Process.consilodate/2 ile oynandım, ancak başarısız oldu. Elixir 1.2 başlayarak

cevap

10

, Mix Sorun burada tarif neden olabilir, varsayılan olarak protokollerini birleştirir: Bu aynı sorunun farklı bir tat var gibi

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

bana geliyor, ama düzeltme büyük olasılıkla aynıdır. Consolidate_protocols öğesini ayarlayın: proje yapılandırmanızda yanlış (yalnızca test ortamında çalışırken).

+1

Ah, "konsolide_protocols" karma proje seçeneğinin farkında değildim. Teşekkür ederim. – lpil

+0

Sadece açıklığa kavuşturmak için, proje seçeneğindeki 'mix.exs' dosyasında proje seçeneği karıştır seçeneğidir. Bunu görüyorsanız muhtemelen def projesi gibi bir şey yapmak istersiniz: [consolidate_protocols: Mix.env! =: Test] ' – Astery

İlgili konular