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

问题描述 投票:21回答:2

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

这可能是因为我正在玩制作users架构,但不想使用我所做的,所以我摆脱它。然后我重新开始为用户创建了一个与第一个不同的新模式。

当我再次尝试运行混合测试时,出现了一个错误,即某些字段不存在,应该存在新模式。

testing elixir phoenix-framework ecto
2个回答
41
投票

您可以使用MIX_ENV=test以及mix do ecto.dropmix ecto.resetmix ecto.rollback等命令访问测试数据库。

在这个特殊情况下,我使用了MIX_ENV=test mix ecto.reset


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

mix ecto.drop --repo Order.Repo

要了解有关Ecto任务的更多信息,请使用mix help <task>


4
投票

您可以将别名设置为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"
© www.soinside.com 2019 - 2024. All rights reserved.