检查所有测试文件是否可编译

Check all test files are compilable

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

我试图创建一个所有文件的列表,然后编译它们,但事实证明我不启动 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

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

我找到了答案。

只是 运行 使用一些不存在的标签进行测试。这将编译所有测试,但其中 none 实际上是 运行

mix test --only whatever

UPDATE:这仅适用于伞式应用程序。对于常规应用程序,nonexistent 标记会导致错误代码 1(请参阅对此问题的评论)。

可以创建一个解决方法:创建一个始终为绿色的空测试并使用标记对其进行标记。

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

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

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

这样您也可以明确指定错误代码 return。