2016-01-23 10 views
7

Tôi có macro tạo mô-đun, cấu trúc cho mô-đun và triển khai giao thức cho cấu trúc đó.Tái hợp nhất các giao thức trong Elixir 1.2 hoặc cao hơn

Trong bộ phần mềm của tôi, tôi có một mô-đun thử nghiệm đơn giản gọi macro và sau đó thực hiện các xác nhận về việc triển khai mô-đun/cấu trúc/giao thức được tạo. Một thử nghiệm gọi hàm giao thức với cấu trúc để xác nhận rằng nó đã được thực hiện. Trước 1.2 điều này làm việc, nhưng bây giờ nó không thành công, và tôi nhận được cảnh báo sau khi chạy bộ.

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 

Tôi đã gỡ bỏ bài kiểm tra này cho bây giờ, khi tôi tin rằng phần còn lại của các bài kiểm tra bộ của tôi chức năng này đầy đủ, nhưng tôi tò mò nếu có một cách để làm cho công việc này một lần nữa, hoặc ít nhất là im lặng cảnh báo .

Tôi đã phát xung quanh với Process.consilodate/2 nhưng không thành công.

Trả lời

10

Bắt đầu từ năm Elixir 1.2, Mix hợp nhất các giao thức theo mặc định, mà có thể gây ra các vấn đề được mô tả ở đây:

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

Nghe có vẻ với tôi như bạn có một hương vị khác nhau của vấn đề này như nhau, nhưng việc sửa chữa có nhiều khả năng giống nhau. Đặt consolidate_protocols: false trong cấu hình dự án của bạn (chỉ khi chạy trong môi trường thử nghiệm).

+1

Ah, tôi không biết tùy chọn dự án kết hợp 'consolidate_protocols'. Cảm ơn bạn. – lpil

+0

Chỉ cần làm rõ, trộn tùy chọn dự án là tùy chọn trong tệp 'mix.exs' trong hàm' project'. Nếu bạn thấy điều này, bạn có thể muốn một cái gì đó như 'def project, do: [consolidate_protocols: Mix.env! =: Test]' – Astery

Các vấn đề liên quan