Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 在伞形应用程序中测试Ecto 2.0_Elixir_Ecto_Ex Unit - Fatal编程技术网

Elixir 在伞形应用程序中测试Ecto 2.0

Elixir 在伞形应用程序中测试Ecto 2.0,elixir,ecto,ex-unit,Elixir,Ecto,Ex Unit,我正在尝试在伞下建立一个应用程序来处理业务逻辑。它使用EXTO与数据库交互。我在设置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

我正在尝试在伞下建立一个应用程序来处理业务逻辑。它使用EXTO与数据库交互。我在设置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)
(退出)GenServer中没有进程
。call表示您试图向其发送呼叫请求的服务器当前不活动。在调用
exto.Adapters.SQL.Sandbox.mode(Domain.Repo,:manual)
之前,必须确保
Domain.Repo
正在运行

最常见的方法是将
Domain.Repo
作为
Supervisor
添加到
应用程序的监控树中。要执行此操作,请将以下内容添加到
域中的
子项
列表中。开始/2

children = [
  ...,
  supervisor(Domain.Repo, []) # add this
]
如果出于某种原因,您只想在测试中启动Repo,您还可以在调用
exto.Adapters.SQL.Sandbox.mode(Domain.Repo,:manual)
中的
test/test\u helper.exs
之前添加以下内容:

Domain.Repo.start_link()

我相信您需要将以下内容添加到测试模块的
设置
块中(Phoenix会这样做):
:ok=exto.Adapters.SQL.Sandbox.checkout(Domain.Repo)
。你能试试吗?我刚刚在测试中添加了以下内容,仍然是相同的行为:
setup do:ok=exto.Adapters.SQL.Sandbox.checkout(Domain.Repo)end
啊,我误读了错误。您需要在测试之前启动
Domain.Repo
。如果此包有一个
应用程序
,请尝试将
主管(Domain.Repo,[])
添加到其子列表中,否则请尝试在
ExUnit.start()之后添加
Domain.Repo.start\u link()
。这就成功了,谢谢!与我相关的是最后一段,我只需要在测试时启动回购。