【发布时间】:2018-09-20 22:40:33
【问题描述】:
setup 回调在每次测试之前调用,setup_all 回调在每个模块仅调用一次,在任何测试运行之前。
我有需要在整个测试套件运行之前准备一些东西的情况。只有一次。我正在使用非标准数据库,并使用所有索引设置架构需要一点时间。所以我想加快测试速度,不要过于频繁地这样做。
有没有办法解决这个问题?
【问题讨论】:
setup 回调在每次测试之前调用,setup_all 回调在每个模块仅调用一次,在任何测试运行之前。
我有需要在整个测试套件运行之前准备一些东西的情况。只有一次。我正在使用非标准数据库,并使用所有索引设置架构需要一点时间。所以我想加快测试速度,不要过于频繁地这样做。
有没有办法解决这个问题?
【问题讨论】:
你可以把你的初始化代码放在test/test_helper.exs。该文件中的任何代码都将在测试运行之前执行,并且只执行一次。正如@mudasobwa 指出的那样,无论代码在ExUnit.start() 之前还是之后,它都会在测试之前运行。
# your code here
ExUnit.start()
# or here
【讨论】:
ExUnit.start()之前”在这里重要吗? test/test_helper.ex 只执行一次,ExUnit 是否已经启动并不重要。
ExUnit 启动它就会尝试运行所有测试,所以我认为严格把它放在前面很重要。
ExUnit.start 的文档说:“启动 ExUnit 并在 VM 终止之前自动运行测试。”我还通过在ExUnit.start() 之后添加代码对此进行了测试,它在测试运行之前执行。我将编辑我的答案。
test_helper.exs 处理的其余部分之间可能存在竞争条件,因为它没有 编译,而是intepred(exs 是一个脚本。)