Ruby 如何捕获rspec示例,将已传递、失败的计数传递给变量并返回控制台?
我需要捕获rspec在测试运行结束时显示给变量并返回控制台的示例pass、fail countRuby 如何捕获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
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"