我目前有一个包含数据库服务的伞形项目。我想在运行mix test
命令时自动播种此服务,但我不能。
我尝试将以下代码放入apps/db_service/mix.ex
defp aliases do
[
"ecto.setup": ["ecto.create --quiet", "ecto.migrate", "run priv/repo/seeds.exs"],
"ecto.reset": ["ecto.drop", "ecto.setup"],
"test": ["ecto.reset", "test"]
]
end
但是如果我在根目录上运行mix test
我收到错误:** (Mix) The database for DatabaseService.Repo couldn't be dropped: ERROR 55006 (object_in_use)
(命令正在服务目录中运行)
所以我试着加入root/mix.ex
defp aliases do
[
"test": ["ecto.drop", "ecto.create", "ecto.migrate", "test"]
]
end
并进入apps/db_service/mix.ex
defp aliases do
[
"test": ["run priv/repo/seeds.exs", "test"]
]
end
但是现在,我收到以下错误:** (Mix) No such file: priv/repo/seeds.exs
如何为种子测试做一下,让mix test
命令在根目录和服务文件夹中工作?
答案 0 :(得分:1)
这是一个很晚的答案,但它在这里:
defp aliases do
"test.seed": ["run #{Path.join(__DIR__, "priv/repo/seeds.exs")}"],
test: ["test.seed", "test"]
end
取自Github上的this response。
答案 1 :(得分:-1)
当您必须执行mix test
时,请使用MIX_ENV=test mix test
。为了在测试数据库中运行任务,我们需要指定环境,就像创建测试环境单独数据库一样。
因此使用MIX_ENV=test
然后命令,以便它在测试数据库上运行任务。