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

Bak*_*vic 2 ruby testing rspec

是否有某种编程方式可以强制rspec测试在首次失败时停止?

例如,

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

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

我知道有以下几种方法:

RSpec.configure do |c|
  c.fail_fast = true
end
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢

gab*_*ent 5

我知道这是一个老问题,但是我在尝试自己实现相同行为时偶然发现了这个问题。经过无济于事的搜索之后,我想到了一个相当容易实现的东西,它实际上提供了所需的行为!

发生异常时,只需将以下内容添加到每个规格文件即可跳过后续示例(在该特定文件中):

  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
Run Code Online (Sandbox Code Playgroud)

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