gpt4 book ai didi

ruby - 如何捕获 rspec 示例、通过、失败计数到变量并返回到控制台?

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:35 28 4
gpt4 key购买 nike

我需要将 rspec 在测试运行结束时显示的示例通过、失败计数捕获到变量并返回到控制台。

Finished in 30 minutes 2.79 seconds
12 examples, 0 failures

请求指导我。

最佳答案

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

最简单的是在 ruby​​ 中以反引号运行脚本:

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"

如果您需要逐个字符地打印出来,请使用 getc 代替 gets 并使用 print 代替 puts。如果您还想进行彩色打印,则需要使用 PTY 而不是 Open3:

require 'pty'
result = ''
PTY.spawn('rspec') do |stdout_err, stdin, pid|
begin
while (char = stdout_err.getc)
print char
result << char
end
rescue Errno::EIO # PTY raises this when the stream closes
ensure
Process.waitpid pid # Wait for `rspec` to finish before continuing
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"

关于ruby - 如何捕获 rspec 示例、通过、失败计数到变量并返回到控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28289549/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com