elixir - ExUnit-在所有测试之前运行一次数据库设置代码

标签 elixir ex-unit

早上好,

我的Elixir项目中有一些特别昂贵的数据库设置代码,可将所需数据插入数据库。

我目前正在测试,这样可以通过@tag :insert_my_data构造在需要此数据之前将其插入。我的测试助手中有执行以下操作的代码:

setup tags do
  if tags[:insert_my_data] do
    # Run code here
  end
end

问题是我必须运行此代码数百次,而且速度很慢。

更好的方法是,在调用mix test之前,代码自动运行一次,并且Ecto提供的事务回滚功能将重置为该已知状态(而不是空数据库)。

我该怎么做?

谢谢!

最佳答案

我知道这是一个古老的问题,但这是一个好问题,并且仍然会在网络搜索结果中弹出。

在执行任何测试之前运行回调的另一种方法是将其放入test/test_helper.exs文件。默认情况下,它仅包含

ExUnit.start()

并且它将在测试运行之前执行一次,无论是仅运行mix test还是使用mix test test/path/to/file_test.exs:42之类的目标定位测试的子集。

如果您仅针对测试运行,我觉得它比修改别名更干净。

关于elixir - ExUnit-在所有测试之前运行一次数据库设置代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40681911/

相关文章:

elixir - 迁移是重复的,但实际上不是

ssl - 使用 Phoenix/Elixir 在本地设置 SSL 时出现问题

testing - Elixir 中的测试方法委托(delegate)

elixir - 清理 ExUnit 测试示例

testing - 使用 ExUnit 进行测试时如何伪造 IO 输入?

elixir - 如何测试 Ecto 迁移

elixir - 使用加载应用程序启动 "iex",并在 1 行中运行命令

elixir - 将 shell 脚本作为混​​合别名运行

unit-testing - Elixir /ExUnit : passing context from testcase to teardown/cleanup method (on_exit) possible?

postgresql - 关于使用 Ecto 预填充 PostgreSQL 表的建议