我正在開發一個phoenix應用程序。此應用程序是傘應用程序的一部分。在這把傘我有責任對申請不同的領域,這是小應用程序:集成測試Web應用程序在傘中的問題
- 鳳凰網頁API(「API」)
- 核心業務邏輯(「核心」)
- 用戶認證(」 AUTH 「)
- 數據庫架構(」 DB「)
」API「 取決於這兩個 」核心「 和 」權威性「,而這兩個應用程序依賴於 」DB「。
只有「db」應用程序有ecto回購,其他所有應用程序都沒有。回購由「db」應用程序啓動,並受到監督。
現在我想在「api」應用程序中測試我的控制器。這是我遇到與ecto有關的問題。當我測試控制器操作時,此操作將從「auth」或「core」調用函數,該函數從「db」調用Repo
的函數(例如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」項目的應用程序上遇到此錯誤時,我能夠應用「共享模式」解決方案。
我的問題是我可以如何通過我的「api」集成測試解決所有權問題。
DB的項目路徑謝謝您的回答。對此的一些想法: (1)只有一個Repo,即「db」應用程序之一。回購是受監督的,應該在「db」應用程序啓動時啓動。 (2)當我爲「api」編寫測試時,「api」應用程序不知道有一個ecto回購,因爲「api」沒有直接依賴「db」。 這就是爲什麼我不知道如何在我的「應用程序」測試中籤出回購協議的原因。 我在我的問題中包含這個 – Thorakas
@Thorakas我的答案仍然存在,測試必須啓動另一個otp應用程序。不確定您是否處於異步模式 – ardhitama
這些測試不以異步模式運行。我還配置了「api」項目,要求啓動「核心」和「身份驗證」,它們本身需要啓動「db」。正如我之前所說,我不知道如何將你的答案應用於我的情況。我無法檢查出'Db.Repo',因爲這個模塊在「api」項目中是未知的。 – Thorakas