我想在我的测试套件的开头运行一段代码(将数据插入数据库!),并在整个测试套件中持续存在。
这样的事情可能吗?
我尝试在一个setup_all
块中运行代码,但是:A)我尝试在此处插入数据库时失败了;B)这只会在该测试模块之间共享,而我希望它在所有测试中共享。
谢谢你的帮助!
我想在我的测试套件的开头运行一段代码(将数据插入数据库!),并在整个测试套件中持续存在。
这样的事情可能吗?
我尝试在一个setup_all
块中运行代码,但是:A)我尝试在此处插入数据库时失败了;B)这只会在该测试模块之间共享,而我希望它在所有测试中共享。
谢谢你的帮助!
只需将通用代码放入您的test/test_helper.exs
:
ExUnit.start()
# Common Code
ModuleOne.some_method
ModuleTwo.other_method(args) # etc
假设您已经解决了清理数据库并在测试之间运行迁移,您可以在您的test/test_helper.exs
:
defmodule TestProject.Helpers do
def setup do
# Common Code
end
end
并在所有测试中使用此setup
块:
setup do
TestProject.Helpers.setup
end
如果您还需要为您的测试设置一个假数据库、模式和迁移,您还需要定义它们,并将其放入您的test_helper
(假设您使用的驱动程序是Postgrex
):
# Start Ecto
{:ok, _} = Ecto.Adapters.Postgres.ensure_all_started(TestProject.Repo, :temporary)
_ = Ecto.Adapters.Postgres.storage_down(TestProject.Repo.config)
:ok = Ecto.Adapters.Postgres.storage_up(TestProject.Repo.config)
{:ok, _} = TestProject.Repo.start_link
有关更详细的示例,您可以查看我的Ecto.Rut
包,该包创建了一个假数据库(test
仅适用于 env),并在运行每个测试之前将其重置。