我是Rspec的新手,我想为打印二维数组的方法创建一个rspec示例。
打印数组的方法:
def print_array
array.each do |row|
row.each do |cell|
print cell
end
puts
end
end
例如,上述代码的结果可能是:
0 0 0
0 0 0
0 0 0
所以我想为上面的方法创建一个期望值(rspec)。
我试图检查放置和打印(STDOUT)但是没有用:
it "prints the array" do
...
expect(STDOUT).to receive(:puts).with("0 0 0 ...")
obj.print_array
end
有没有办法测试究竟打印出来的是什么?
答案 0 :(得分:2)
RSpec专门为此类事件设置output
matcher,因此您的示例将变为类似
def print_array(array)
array.each do |row|
row.each do |cell|
print cell
end
puts
end
end
RSpec.describe 'print_array' do
it 'prints the array' do
expect do
print_array([
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
])
end.to output("000\n000\n000\n").to_stdout
end
end
答案 1 :(得分:1)
请参阅以下链接。 output_to_stdout matcher
我们可以这样写:
expect { puts "1" }.to output("1\n").to_stdout
所以,你的rspec测试
matrix_format_str = "0 0 0\n0 0 0\n0 0 0\n"
expect { print_array }.to output(matrix_format_str).to_stdout