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

时间:2016-11-18 16:29:56

标签: 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提供的事务回滚功能将重置为此已知状态(而不是空数据库),那么效果会更好。

我该如何做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

ExUnit.start()

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

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