2016-01-23 7 views
7

Ho una macro che crea un modulo, una struttura per il modulo e implementa un protocollo per quella struttura.Riconsolidare i protocolli in elisir 1.2 o successivo

Nella mia suite ho un semplice modulo di test che chiama la macro, e quindi fa asserzioni sull'implementazione modulo/struct/protocollo generato. Un test chiama la funzione di protocollo con la struttura per affermare che è stata implementata. Prima di 1.2 questo ha funzionato, ma ora fallisce e ricevo il seguente avviso quando si esegue la suite.

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 

Ho rimosso questo test per ora, come credo che il resto dei miei test interno questa funzionalità sufficientemente, ma io sono curioso di sapere se c'è un modo per rendere di nuovo questo lavoro, o per lo meno il silenzio l'avviso .

Ho giocato con Process.consilodate/2, ma non ha avuto successo.

risposta

10

A partire dal Elixir 1.2, Mix consolida protocolli per impostazione predefinita, che può causare il problema descritto qui:

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

Sembra a me che tu abbia un sapore diverso di questo stesso problema, ma la correzione è molto probabilmente lo stesso. Imposta consolidate_protocols: false nella configurazione del progetto (solo durante l'esecuzione nell'ambiente di test).

+1

Ah, non ero a conoscenza dell'opzione di mix del progetto 'consolidate_protocols'. Grazie. – lpil

+0

Giusto per chiarire, l'opzione di mix dei progetti è un'opzione nel file 'mix.exs' nella funzione' project'. Se vedi questo probabilmente vuoi qualcosa come 'def project, fai: [consolidate_protocols: Mix.env! =: Test]' – Astery

Problemi correlati