如何回滚、重置或删除 Ecto 测试数据库?
How to rollback, reset, or drop Ecto test database?
通常mix.test
清理测试数据库,但它不起作用。
可能是因为我一直在尝试制作一个 users
模式,但不想使用我制作的东西,所以我放弃了它。然后我重新开始并为用户创建了一个与第一个不同的新架构。
当我再次尝试 运行 混合测试时,出现了一些字段不存在的错误,这些字段本应存在于新架构中。
您可以使用 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>
您可以像这样将别名设置为 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"
通常mix.test
清理测试数据库,但它不起作用。
可能是因为我一直在尝试制作一个 users
模式,但不想使用我制作的东西,所以我放弃了它。然后我重新开始并为用户创建了一个与第一个不同的新架构。
当我再次尝试 运行 混合测试时,出现了一些字段不存在的错误,这些字段本应存在于新架构中。
您可以使用 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>
您可以像这样将别名设置为 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"