3

当我需要检查我的应用程序测试套件中的所有文件是否可编译时,我有一个案例。

我正在尝试创建所有文件的列表,然后编译它们,但事实证明,如果不启动 ExUnit,我就无法做到这一点。

find apps/*/test -name "*.exs" | xargs elixirc

== Compilation error in file apps/api/test/api/request_validators/validator_test.exs ==
** (RuntimeError) cannot use ExUnit.Case without starting the ExUnit application, please call ExUnit.start() or explicitly start the :ex_unit app
    expanding macro: ExUnit.Case.__using__/1

如何在不实际运行测试的情况下检查所有测试文件是否可编译?

4

2 回答 2

2

正确的解决方案是确实开始ExUnit,编译所有文件并检查结果。

mix run -e 'ExUnit.start(); exit({:shutdown, (if match?({:ok, _, _}, Kernel.ParallelCompiler.compile(Path.wildcard("test/**/*.exs"))), do: 0, else: 1)})'

这样,您还可以显式指定要返回的错误代码。

于 2019-12-24T13:36:06.857 回答
1

我找到了答案。

只需使用一些不存在的标签运行测试。这将编译所有测试,但它们都不会实际运行

mix test --only whatever

更新:这只适用于伞形应用程序。对于常规应用程序,不存在的标签会导致错误代码1(请参阅此问题的评论)。

可以创建一个解决方法:有一个始终为绿色的空测试并用标签标记它。

另请参阅接受的答案以获得更好的解决方案。

于 2019-12-24T13:24:05.947 回答