Elixir / Phoenix - 运行 测试开始时的代码 运行,所有测试的共享数据
Elixir / Phoenix - Run code at the very beginning of a test run, shared data for ALL tests
我想 运行 在我的测试套件的开头添加一段代码(将数据插入数据库!),并在整个测试套件中持续存在。
这样的事情可能吗?
我尝试 运行 将代码放在 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
我想 运行 在我的测试套件的开头添加一段代码(将数据插入数据库!),并在整个测试套件中持续存在。
这样的事情可能吗?
我尝试 运行 将代码放在 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