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