Я работаю над приложением phoenix. Это приложение является частью зонтичного приложения. В этом зонтике у меня есть небольшие приложения, отвечающие за разные области приложения, а именно:
- Феникс веб-API ("API")
- основная бизнес-логика («ядро»)
- аутентификация пользователя («авторизация»)
- схема базы данных ("db")
«api» зависит как от «core», так и от «auth», в то время как эти два приложения зависят от «db».
Только приложение «db» имеет экто-репозиторий, а все остальные приложения — нет. Репо запускается приложением "db" и контролируется.
Теперь я хочу протестировать свои контроллеры в приложении «api». Вот тут у меня возникла проблема с экто. Когда я тестирую действие контроллера, это действие вызывает функцию из "auth" или "core", которая вызывает функции Repo
из "db" (например, Repo.insert/2
). Это приводит к OwnershipError
:
** (DBConnection.OwnershipError) cannot find ownership process for #PID<0.458.0>.
When using ownership, you must manage connections in one
of the three ways:
* By explicitly checking out a connection
* By explicitly allowing a spawned process
* By running the pool in shared mode
The first two options require every new process to explicitly
check a connection out or be allowed by calling checkout or
allow respectively.
The third option requires a {:shared, pid} mode to be set.
If using shared mode in tests, make sure your tests are not
async.
If you are reading this error, it means you have not done one
of the steps above or that the owner process has crashed.
See Ecto.Adapters.SQL.Sandbox docs for more information.
Теперь моя проблема заключается в том, что я не знаю, как исправить эту ошибку, используя предложенные решения в тестах «api», поскольку приложение «api» не знает приложение «db» и поэтому не может выполнить проверку подключения. Когда я столкнулся с этой ошибкой в приложении, которое напрямую зависело от проекта «db», я смог применить решение «общий режим».
Мой вопрос будет заключаться в том, как я могу решить проблему владения с помощью моих интеграционных тестов «api».