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

For a more detailed example, you can see my Ecto.Rut package that creates a fake database (for the test env only), and resets it before running each test.