Циклическая зависимость в тестовых примерах

У меня есть три приложения в настройке зонтичного проекта

  1. Уровень данных
  2. Апислой
  3. OtherLayer Другой слой (обязательно)

Теперь у меня есть такие зависимости, определенные в микс-файле. Приложение ApiLayer имеет

{:OtherLayer, in_umbrella: true},
{:Datalayer, in_umbrella: true}

Приложение Datalayer не зависит от зонтичных приложений Приложение OtherLayer имеет

{:Datalayer, in_umbrella: true}

Но тестовые случаи, которые вызываются из приложения ApiLayer, должны вызывать контекст, определенный в Datalayer, а контекст Datalayer, в свою очередь, должен получить доступ к некоторым функциям для OtherLayer, но не может. потому что, если я добавлю его зависимость в Datalayer. Это будет случай циклической зависимости. Мне нужно пройти тесты. есть ли способ загрузить часть кода без создания циклической зависимости? Любая помощь будет оценена. Спасибо


person Radio Active    schedule 10.09.2018    source источник
comment
Я пробовал некоторые решения, такие как динамическое требование этого модуля, но не сработало, и попробовал параметр sure_all_started в test_helper, но получил {: error, {: m, {: invalid_restart_type, : data_layer}}}   -  person Radio Active    schedule 10.09.2018
comment
Если они действительно настолько интегрированы, они, вероятно, не должны быть отдельными приложениями. Одним из решений, вероятно, будет обработка такого рода связи путем передачи модуля в функцию. Например, если у вас есть метод в вашем ApiLayer, который вызывает DataLayer, но DataLayer также нуждается в значениях из OtherLayer, вы можете разработать функцию в DataLayer, чтобы принимать модуль в качестве аргумента и передавать его в ApiLayer. def my_func(x), do: DataLayer.Module.func(x, OtherLayer.DependencyModule)   -  person Julia Will    schedule 19.09.2018


Ответы (1)


Если OtherLayer всегда включено в приложение, которое уже имеет Datalayer в качестве зависимости, то вы можете удалить зависимость Datalayer из OtherLayer, так как приложение все равно будет включено в ваш выпуск. Если вам нужно собрать OtherLayer как отдельное приложение, создайте приложение OtherLayerWrapper с зависимостями Datalayer и OtherLayer.

person lastcanal    schedule 23.09.2018