0

我想在我的测试套件的开头运行一段代码(将数据插入数据库!),并在整个测试套件中持续存在。

这样的事情可能吗?

我尝试在一个setup_all块中运行代码,但是:A)我尝试在此处插入数据库时​​失败了;B)这只会在该测试模块之间共享,而我希望它在所有测试中共享。

谢谢你的帮助!

4

1 回答 1

3

在开始测试之前运行一次

只需将通用代码放入您的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),并在运行每个测试之前将其重置。

于 2016-10-25T12:59:45.070 回答