Rspec测试放(2d数组)

时间:2017-07-14 21:26:23

标签: ruby rspec

我是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

有没有办法测试究竟打印出来的是什么?

2 个答案:

答案 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