在第一次失败时停止执行特定的rspec测试(不是测试套件)

有没有一些程序化的方法来强制rspec测试在第一次失败时停止?

例如,

  1. 我有一个带有几个rspec测试的测试套件,我一次运行它们。
  2. 每个rspec测试都位于单独的spec.rb文件中

如果在任何这些测试中发生某些故障,我想在特定的测试步骤上停止执行该特定测试,该测试步骤失败但不会停止执行我正在运行的整个测试套件。

我知道有以下方法:

RSpec.configure do |c| c.fail_fast = true end 

但是,在我在测试套件中运行的任何规范文件中定义它会导致套件的所有执行失败。

这种情况有什么办法可以处理?

提前致谢

我知道这是一个老问题,但我偶然发现它同时希望自己实现同样的行为。 经过多次徒劳无功的搜索后,我想出了一些相当简单的实现方法,它实际上提供了所需的行为!

只需在每个spec文件中添加以下内容,以便在发生exception时跳过后续示例(在该特定文件中):

  before :all do $continue = true end around :each do |example| if $continue $continue = false example.run $continue = true unless example.exception else example.skip end end 

这里的逻辑应该是不言自明的。 继续运行示例,直到发生exception,然后跳过该规范的其余示例。 每个钩子周围很好地促进了这个逻辑,因为它可以控制每个例子的执行。 有关“around”钩子的更多信息,请参阅RSpec文档 。