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

时间:2017-02-10 14:55:45

标签: testing elixir phoenix-framework ecto

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

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

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

2 个答案:

答案 0 :(得分:37)

您可以使用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>

答案 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"