Rspec测试放(2d阵列)
问题描述:
我是Rspec的新手,我想为打印2d数组的方法创建一个rspec示例。Rspec测试放(2d阵列)
方法,其打印数组:
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的) 。
我试图检查puts和印刷(标准输出),但没有奏效:
it "prints the array" do
...
expect(STDOUT).to receive(:puts).with("0 0 0 ...")
obj.print_array
end
有什么办法来测试究竟是打印出来?
答
的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
答
请参考以下链接。 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