如何回滚、重置或删除 Ecto 测试数据库?

How to rollback, reset, or drop Ecto test database?

通常mix.test 清理测试数据库,但它不起作用。

可能是因为我一直在尝试制作一个 users 模式,但不想使用我制作的东西,所以我放弃了它。然后我重新开始并为用户创建了一个与第一个不同的新架构。

当我再次尝试 运行 混合测试时,出现了一些字段不存在的错误,这些字段本应存在于新架构中。

您可以使用 MIX_ENV=test 后跟 mix do ecto.dropmix ecto.resetmix ecto.rollback.

等命令来访问测试数据库

在这种特殊情况下,我使用了:

MIX_ENV=test mix ecto.reset

如果您的应用程序有多个存储库 (DB),您需要指定一个特定的存储库以避免将操作应用于所有存储库。例如

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.例如这样的

config :project_name, ProjectName.DB.Repo,
  pool: Ecto.Adapters.SQL.Sandbox,
  database: "database_name_test"