【问题标题】:Abort ExUnit on the first test that does not pass在第一个未通过的测试中中止 ExUnit
【发布时间】:2020-01-17 01:44:28
【问题描述】:

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

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

【问题讨论】:

标签: automated-tests elixir ex-unit


【解决方案1】:

从 Elixir 1.8 开始就有such an option

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

mix test --max-failures 1

【讨论】:

    【解决方案2】:

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

    但是,您可以通过

    运行单个测试
    mix test path/to/testfile.exs:12
    

    其中 12 是测试的行号。

    希望有帮助!

    【讨论】:

      【解决方案3】:

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

      仍然可以选择自己动手:只需为EventManager 实现一个自定义处理程序,并在“测试失败”事件中终止whole application


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

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

      【讨论】:

      • 在我的例子中,测试速度并不快,它们测试的是有状态系统的 HTTP 接口,因此它们不是异步运行的。具体来说,我通过 Elixir's Cabbage 和 Wallaby 在 Gherkin 场景中练习 BDD。
      • 那么您可能需要在案例之间重新组织您的测试,因为在一个案例中进行测试are always run synchronously
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多