RSpec标记跳过的测试失败

时间:2018-07-12 09:04:48

标签: ruby-on-rails-4 rspec rspec-rails rspec3

我们有一个用RSpec编写的单元测试套件。实际上,我们有一些失败的测试。

我正在寻找的是脚本或魔术命令,以将所有失败的测试标记为已跳过,因此我不必一一遍阅它们并将其标记为已跳过。

2 个答案:

答案 0 :(得分:4)

应该相对简单。 RSpec列出了失败的规范

rspec ./spec/models/user.rb:67 # User does this thing
rspec ./spec/models/post.rb:13 # Post does another thing
rspec ./spec/models/rating.rb:123 # Rating does something else entirely

文件名和行号指向测试的开始行,带有it ... do的行。

编写一个脚本

  1. 从故障输出中提取文件名和行号
  2. 打开这些文件,转到指定的行
  3. replaces it with xit

答案 1 :(得分:4)

我发现了这个很棒的脚本,完全可以满足我的需要: https://gist.github.com/mcoms/77954d191bde31d4677872d2ab3d0cd5

如果删除了要点,请在此处复制内容:

# frozen_string_literal: true

class CustomFormatter
  RSpec::Core::Formatters.register self, :example_failed

  def initialize(output)
    @output = output
  end

  def example_failed(notification)
    tf = Tempfile.new
    File.open(notification.example.metadata[:file_path]) do |f|
      counter = 1
      while (line = f.gets)
        if counter == notification.example.metadata[:line_number]
          line.sub!('it', 'skip')
          line.sub!('scenario', 'skip')
          @output << line
        end
        tf.write line
        counter += 1
      end
    end
    tf.close
    FileUtils.mv tf.path, notification.example.metadata[:file_path]
  end
end