2

ビジネス ロジックを処理する傘下のアプリをセットアップしようとしています。データベースとのやり取りには Ecto を使用します。テスト用の SQL.Sandbox の設定に問題があります。テストを実行するたびに、次のエラーが発生します。

$ MIX_ENV=test mix test
** (exit) exited in: GenServer.call(Domain.Repo.Pool, :checkin, 5000)
  ** (EXIT) no process
  (elixir) lib/gen_server.ex:596: GenServer.call/3
  lib/ecto/adapters/sql/sandbox.ex:422: Ecto.Adapters.SQL.Sandbox.mode/2
  (elixir) lib/code.ex:363: Code.require_file/2
  (elixir) lib/enum.ex:651: Enum."-each/2-lists^foreach/1-0-"/2
  (elixir) lib/enum.ex:651: Enum.each/2

私の config.exs は次のようになります。

use Mix.Config

config :domain,
  ecto_repos: [Domain.Repo]

config :domain, Domain.Repo,
  adapter: Ecto.Adapters.Postgres,
  pool: Ecto.Adapters.SQL.Sandbox,
  username: "postgres",
  password: "postgres",
  database: "app_test"

私の test_helper.exs は次のとおりです。

ExUnit.start()
Ecto.Adapters.SQL.Sandbox.mode(Domain.Repo, :manual)
4

1 に答える 1

4

(EXIT) no processinGenServer.callは、呼び出し要求を送信しようとしたサーバーが現在稼働していないことを意味します。Domain.Repoを呼び出す前に、 が実行されていることを確認する必要がありますEcto.Adapters.SQL.Sandbox.mode(Domain.Repo, :manual)

最も一般的な方法は、の監視ツリーにDomain.Repoとして追加することです。これを行うには、次を のリストに追加します。SupervisorApplicationchildrenDomain.start/2

children = [
  ...,
  supervisor(Domain.Repo, []) # add this
]

なんらかの理由で、テストでのみレポを開始したい場合は、 を呼び出す前に次を追加することもできEcto.Adapters.SQL.Sandbox.mode(Domain.Repo, :manual)ますtest/test_helper.exs

Domain.Repo.start_link()
于 2016-09-18T09:26:36.023 に答える