通常mix.test
清理测试数据库,但它不起作用。
这可能是因为我正在玩制作users
架构,但不想使用我所做的,所以我摆脱它。然后我重新开始为用户创建了一个与第一个不同的新模式。
当我再次尝试运行混合测试时,出现了一个错误,即某些字段不存在,应该存在新模式。
您可以使用MIX_ENV=test
以及mix do ecto.drop
,mix ecto.reset
或mix ecto.rollback
等命令访问测试数据库。
在这个特殊情况下,我使用了MIX_ENV=test mix ecto.reset
。
如果您的应用程序有多个repos(DB),您将需要指定一个特定的repo以避免应用于所有repos的操作。例如
mix ecto.drop --repo Order.Repo
要了解有关Ecto任务的更多信息,请使用mix help <task>
您可以将别名设置为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"