2016-01-23 7 views
7

モジュールを作成するマクロ、モジュールの構造体、およびその構造体のプロトコルを実装しています。Elixir 1.2以降のプロトコルを再結合

私のスイートでは、マクロを呼び出し、生成されたモジュール/構造体/プロトコルの実装でアサーションを作成する単純なテストモジュールがあります。 1つのテストでは、構造体が実装されていることを宣言するために構造体とともにプロトコル関数を呼び出します。 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

ああ、私は 'consolidate_protocols'ミックスプロジェクトオプションを知らなかった。ありがとうございました。 – lpil

+0

明確にするために、プロジェクトのオプションを混在させるには、 'project'関数の' mix.exs'ファイルにオプションがあります。これを見れば、おそらく 'defプロジェクトのようなものが欲しいでしょう:[consolidate_protocols:Mix.env!=:test]' – Astery

関連する問題