3

早上好,

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

@tag :insert_my_data我目前有我的测试工作,以便在通过构造需要它的任何测试之前插入此数据。我的测试助手中有代码,它执行以下操作:

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

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

如果代码在任何调用之前自动运行一次mix test,并且 Ecto 提供的事务回滚功能将重置为这个已知状态(而不是空数据库),那么效果会更好。

我怎样才能做到这一点?

谢谢!

4

1 回答 1

0

我知道这是一个老问题,但它是一个很好的问题,它仍然会出现在网络搜索结果中。

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

ExUnit.start()

并且它将在测试运行之前执行一次,无论是仅运行mix test还是针对具有类似mix test test/path/to/file_test.exs:42.

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

于 2019-02-20T12:27:48.567 回答