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

标签 ruby testing rspec

是否有一些编程方式可以强制 rspec 测试在第一次失败时停止?

例如,

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

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

我知道有以下方法:

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

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

有什么办法可以处理这个案子吗?

提前致谢

最佳答案

我知道这是一个老问题,但我在寻求自己实现相同行为时偶然发现了它。经过多次无果而终的搜索后,我想出了一个实现起来相当简单的东西,它实际上提供了所需的行为!

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

  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

这里的逻辑应该是不言自明的。继续运行示例直到发生异常,然后跳过该规范的其余示例。 around each 钩子(Hook)很好地促进了这个逻辑,因为它可以控制每个示例的执行。查看RSpec documentation有关“around”钩子(Hook)的更多信息。

关于ruby - 在第一次失败时停止执行特定的 rspec 测试(不是测试套件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085658/

相关文章:

ruby-on-rails - 在Rails中存储StandardError的异常类名称

android - 在 Android Studio 3.0 中获取 Android 测试代码覆盖率

javascript - 区分 DOM——如何编写单元测试来检查脚本是否对页面上的元素进行了任何用户可见的更改?

ruby-on-rails-4 - RSpec:如何 stub 方法和方法链

ruby - 在 Ruby 1.8.7 中使用标题大小写

ruby - 为什么不推荐使用 Enumerable#each_with_object?

ruby-on-rails - 设计:尝试创建没有 ID 的记录

ruby - 配置 Mongoid 关系以返回排序的对象

testing - 我们如何在 JIRA 中将问题列表从一个项目复制到另一个项目?

rspec - 带有 RSpec-2 的 RCov