私はphoenixアプリケーションを開発中です。このアプリケーションは、傘のアプリケーションの一部です。 「(傘の統合テストWebアプリケーションの問題
- フェニックスウェブAPI(「API」)
- コアビジネスロジック(「コア」)
- ユーザ認証:この傘では、私は、アプリケーションのさまざまな分野を担当小さなアプリケーションを持っていますDB "これら2つのアプリケーションが依存しながら、 "認証 ")
- データベーススキーマ(" DB」)
"APIは" コア "と" 認証" の両方に依存します"。
"db"アプリのみがエクトリポを持っていますが、他のすべてのアプリはそうではありません。レポは "db"アプリによって開始され、監督されます。
今、 "api"アプリケーションでコントローラをテストしたいと思います。これがエクトの問題にぶつかるところです。私がコントローラアクションをテストするとき、このアクションは "auth"または "core"の関数を呼び出します。これは "db"(Repo.insert/2
など)のRepo
の関数を呼び出します。これは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」アプリケーションは「DBを知らないと、私は「API」テストで提案されたソリューションを使用してこのエラーを修正する方法を知っていないということです"アプリケーションであり、したがって接続チェックアウトを行うことはできません。 "db"プロジェクトに直接依存するアプリケーションでこのエラーが発生したとき、私は "共有モード"のソリューションを適用することができました。
私の "api"統合テストの所有権問題を解決する方法は私の質問です。ここで
にDBのプロジェクトのパスを含めることを忘れないでくださいあなたの答えをいただき、ありがとうございます。いくつか考えてみましょう: (1) "db"アプリの1つだけです。レポは監視され、 "db"アプリが起動されたときに開始される必要があります。 (2) "api"のテストを書くとき、 "api"アプリケーションは "api"が "db"に直接依存しないので、ecto repoがあることを知らない。 これは、私が "app"テストでRepoをどのようにチェックアウトできるかわからない理由です。 私はこれを私の質問に含めます – Thorakas
@ Thorakas私の答えはまだ立っています。テストには他のotpアプリが起動していなければなりません。非同期モードであるかどうかわからない – ardhitama
これらのテストは非同期モードでは実行されません。また、「コア」と「認証」を開始するように「api」プロジェクトを設定しました。これらのプロジェクトでは、開始するには「db」が必要です。私が前に述べたように、あなたの答えを私の状況に適用する方法はわかりません。このモジュールは "api"プロジェクトでは知られていないので、 'Db.Repo'をチェックすることはできません。 – Thorakas