【发布时间】:2021-03-21 11:02:41
【问题描述】:
我有一个示例代码:
def print_stuff(first_num, second_num)
puts 'hello'
(first_num..second_num).to_a.each do |num|
puts 'The current number is: '
puts "#{num}"
end
end
我和使用 rspec,我想测试一下输出是否正确。我的尝试如下:
expect(initialize_program(1, 3)).to output(
"The current number is:
1
The current number is:
2
The current number is:
3").to_stdout
但是,相反,我得到一个预期的块输出到标准输出,但不是块错误,因为 initialize_program(1,3) 正在输出文本,但它是在 .each 块内完成的,因此方法本身返回数组数字范围。
如何测试块内的文字,看看输出的文字是否正确?
谢谢!
【问题讨论】:
-
你的
initialize_program方法在哪里,请放在那里。 -
对不起,initialize_program实际上应该是上面的print_stuff方法。但我已经解决了。我刚刚从控制台捕获了 STDOUT 并转换为字符串,并对其进行了测试。不过,谢谢,
-
如果你想使用
output匹配器,你需要将一个块传递给expect,所以我认为更改为expect { print_stuff(1, 3) }.to output(...)应该适合你(注意花括号) -
@StefanRendevski output_to_stdout matcher 可以工作,但在这种情况下,它感觉像是一种反模式。将方法重构为更易于测试,而不是解析标准输出,似乎是一种更简洁的方法。不过,匹配器当然是一个可行的选择。
标签: ruby unit-testing rspec iteration stdout