2017-07-14 62 views
0

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

有什麼辦法來測試究竟是打印出來?

回答

1

的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

請參考以下鏈接。 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