在第一个未通过的测试中中止 ExUnit

Abort ExUnit on the first test that does not pass

在 Ruby 中,特别是 RSpec,您可以告诉测试运行器在第一个未通过命令行标志 --fail-fast 的测试时中止。这有助于避免在连续修复大量测试时浪费时间或失去注意力,例如在进行测试驱动或行为驱动开发时。

现在在 Elixir 和 ExUnit 上,我正在寻找一种方法来做到这一点。有办法吗?

不幸的是(据我所知)no such flag implemented

但是,您可以 运行 通过

进行单次测试
mix test path/to/testfile.exs:12

其中 12 是测试的行号。

希望对您有所帮助!

这没有多大意义,因为 Elixir 中的测试是 a) 运行 非常快并且 b) 在大多数情况下 运行 是异步的。在失败的测试中立即终止测试套件是一种反模式,这就是 ExUnit 作者不允许这样做的原因。

人们仍然可以选择射自己的腿:只需为“测试失败”事件的 EventManager and kill the whole application 实现自定义处理程序。


对于 BDD,最好使用 tags,运行 仅包含此功能的测试套件。这样您就可以在将来的任何时候运行 测试每个功能。

此外,作为最后的手段,可能 运行 仅通过将文件名传递给特定案例 mix test and/or 仅通过传递文件名后跟一个特定测试冒号和行号。

自 Elixir 1.8 以来有 such an option

使用 --max-failures 开关限制评估失败的测试数量。要在第一次失败后停止测试套件,运行 这个:

mix test --max-failures 1