通常mix.test
清除测试数据库,但它不起作用。
可能是因为我正在玩users
模式,但是我不想使用我制作的模式,所以我摆脱了它。然后我重新开始为用户创建了一个与第一个不同的新模式。
当我再次尝试运行混合测试时,出现了一个错误,即某些字段不存在,应该存在新模式。
答案 0 :(得分:37)
您可以使用MIX_ENV=test
后跟mix do ecto.drop
,mix ecto.reset
或mix ecto.rollback
等命令来访问测试数据库。
在这个特殊情况下,我使用了MIX_ENV=test mix ecto.reset
。
如果您的应用程序有多个存储库(DB),您将要指定一个特定的存储库以避免应用于所有存储库的操作。例如
mix ecto.drop --repo Order.Repo
要了解有关Ecto任务的更多信息,请使用mix help <task>
答案 1 :(得分:3)
您可以将别名设置为mix.exs,就像这样
defp aliases do
[
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
"ecto.reset": ["ecto.drop", "ecto.setup"],
"test": ["ecto.create --quiet", "ecto.migrate", "test"]
]
end
您需要将数据库运行到沙盒模式。
你的/appdir/test/test_helper.exs应该是这样的
Ecto.Adapters.SQL.Sandbox.mode(ProjectName.DB.Repo, {:shared, self()})
ExUnit.start(exclude: [:pending])
和/appdir/config/test.exs一样
config :project_name, ProjectName.DB.Repo,
pool: Ecto.Adapters.SQL.Sandbox,
database: "database_name_test"