2016-01-23 17 views
7

में प्रोटोकॉल को पुन: समेकित करें मेरे पास एक मैक्रो है जो मॉड्यूल के लिए एक मॉड्यूल बनाता है, और उस संरचना के लिए प्रोटोकॉल लागू करता है।एलिक्सीर 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 सेट करें: आपकी प्रोजेक्ट कॉन्फ़िगरेशन में झूठी (केवल परीक्षण वातावरण में चलते समय)।

+1

आह, मुझे 'consolidate_protocols' मिश्रण परियोजना विकल्प से अवगत नहीं था। धन्यवाद। – lpil

+0

बस स्पष्ट करने के लिए, प्रोजेक्ट विकल्प को 'project.exs' फ़ाइल में' project' function 'में मिलाएं। यदि आप इसे देखते हैं तो शायद आप 'डीफ प्रोजेक्ट' जैसे कुछ चाहते हैं, करें: [consolidate_protocols: Mix.env! =: Test] ' – Astery

संबंधित मुद्दे