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

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

  1. Datalayer
  2. ApiLayer
  3. Другой слой Другой уровень (но обязательный)

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

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

Приложение Datalayer не зависит от зонтичных приложений В приложении Другой слой есть

{:Datalayer, in_umbrella: true}

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

Я пробовал некоторые решения, например, динамически требовать этот модуль, но не работал, и попробовал опцию sure_all_started в test_helper, но получил {: error, {: m, {: invalid_restart_type,: data_layer}}}

Radio Active 10.09.2018 08:32

Если они действительно так интегрированы, они, вероятно, не должны быть отдельными приложениями. Одним из решений, вероятно, было бы обработать такой вид связи, передав модуль функции. Например, если у вас есть метод в вашем ApiLayer, который вызывает DataLayer, но DataLayer также нуждается в значениях из OtherLayer, вы можете создать функцию в DataLayer, чтобы принимать модуль в качестве аргумента и передавать его в ApiLayer. def my_func(x), do: DataLayer.Module.func(x, OtherLayer.DependencyModule)

Julia Will 19.09.2018 21:30
0
2
218
1

Ответы 1

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

Другие вопросы по теме