Ruby 如何捕获rspec示例,将已传递、失败的计数传递给变量并返回控制台?

Ruby 如何捕获rspec示例,将已传递、失败的计数传递给变量并返回控制台?,ruby,rspec,Ruby,Rspec,我需要捕获rspec在测试运行结束时显示给变量并返回控制台的示例pass、fail count Finished in 30 minutes 2.79 seconds 12 examples, 0 failures 请求在这方面为我提供指导。有几种方法可以捕获脚本的输出 最简单的方法是从ruby以backticks的形式运行脚本: results = `rspec` #=> "Blah, blah, blah\nFinished in 30 minutes 2.79 seconds\n1

我需要捕获rspec在测试运行结束时显示给变量并返回控制台的示例pass、fail count

Finished in 30 minutes 2.79 seconds
12 examples, 0 failures

请求在这方面为我提供指导。

有几种方法可以捕获脚本的输出

最简单的方法是从ruby以backticks的形式运行脚本:

results = `rspec`
#=> "Blah, blah, blah\nFinished in 30 minutes 2.79 seconds\n12 examples, 0 failures\n"
这样做的缺点是,脚本在运行时不会输出到控制台,如果您有一些测试需要半小时才能运行,您可能需要关注它们

考虑到这一点,您可以使用
Open3

require 'open3'
result = ''
Open3.popen2e('rspec') do |stdin, stdout_err, wait_thr|
  while (line = stdout_err.gets) # this captures each line as it goes
    puts line
    result << line
  end
end

result
#=> "Blah, blah, blah\nFinished in 30 minutes 2.79 seconds\n12 examples, 0 failures\n"
无论哪种方式,您都可以使用正则表达式提取值:

match_data = result.match(/(\d+) examples, (\d+) failures/)
#=> #<MatchData "12 examples, 0 failures" 1:"12" 2:"0">

examples = match_data[1]
#=> "12"

fails = match_data[2]
#=> "0"
match_data=result.match(/(\d+)示例,(\d+)失败/)
#=> #
示例=匹配_数据[1]
#=> "12"
失败=匹配_数据[2]
#=> "0"
match_data = result.match(/(\d+) examples, (\d+) failures/)
#=> #<MatchData "12 examples, 0 failures" 1:"12" 2:"0">

examples = match_data[1]
#=> "12"

fails = match_data[2]
#=> "0"