【问题标题】:Check all test files are compilable检查所有测试文件是否可编译
【发布时间】:2019-12-24 23:35:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: elixir ex-unit


    【解决方案1】:

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

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

    这样您还可以明确指定要返回的错误代码。

    【讨论】:

    • 它比我的方法工作得更快,谢谢!我必须将路径更改为 "apps/*/test/**/*.exs" 才能正常工作,因为我正在伞形应用程序中运行测试。
    • 它不再为我工作了。但是,错误过于具体,无法在此分享。
    • 这段代码确实是防弹的。我很肯定这个问题是引发的。
    • 该错误是关于在编译另一个伞形应用程序时缺少配置的。我只是运行测试时没有这样的错误。
    • 啊,雨伞,是的。您可能应该检查elixir 编译器如何处理雨伞以及那里是否有一些特定的怪癖。
    【解决方案2】:

    我找到了答案。

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

    mix test --only whatever
    

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

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

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

    【讨论】:

    • 如果您目视检查输出,则此方法有效,但命令的 unix 状态的状态为 1,因此如果您在脚本中使用它可能会失败。请参阅我的答案,了解试图规避这种情况的替代方法。
    • 是的,状态为 1,表示失败。 0状态表示成功。我没有在视觉上检查它,当我这样做时,CircleCI 正确地发出红色状态。
    • @denis.peplin 在这种情况下,无论编译是否成功,状态都将为1,因为不存在的标签已被视为失败。也就是说,上面根本没有检查任何东西。
    • 我刚刚在两种情况下检查过它:普通应用程序和伞式应用程序。当它是一个普通的应用程序时它会发出1,当它是一个雨伞时它会发出0
    • 有趣。我认为这是一个值得报告的错误。
    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多