2016-07-14 180 views
0

我有一個井字遊戲拖這種方法的一個部分:RSpec的測試方法

def start(token) 
    if token == "X" 
    puts "#{@player1}: Please enter a number for your X to go" 
    elsif token == "O" 
    puts "#{@player2}: Please enter a number for your O to go" 
    end 

    player_input = STDIN.gets.chomp 

    locate_player_input(token, player_input) 
end 

我只是想測試一下,看看是否正確的事情是puts'd到終端。我有這樣的測試:

describe "#start" do 
    context "X player's turns" do 
    it "prints proper messege" do 
     expect(STDOUT).to receive(:puts).with("Harry: Please enter a number for your X to go") 
     game.start("X") 
    end 
    end 
end 

但是我有一種感覺,game.start(「X」)線是啥也不做這項工作。我如何編寫測試來檢查puts語句是否正確輸出?

+0

重構建議:不要使用'if','else',只使用'puts'#{@ player2}:請爲您的#{token}輸入一個數字「'。 – lwassink

+0

好看。感謝您的建議,我肯定會在我開始重構時執行它 –

+0

測試失敗了嗎?什麼是失敗信息? – Johnson

回答

0

我想我想通了。由於我的函數首先放置了一些東西,然後調用下一個要運行的方法,我需要另一個期望語句。我通過的測試是這樣的:

describe "#start" do 
    context "X player's turns" do 
     it "prints proper messege" do 
      expect(STDOUT).to receive(:puts).with("Harry: Please enter a number for your X to go") 
      expect(game).to receive(:get_input) 
      game.start("X") 
     end 
    end 
end 

我不確定這是否正確,但測試沒有通過。