2016-07-14 144 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 

我不确定这是否正确,但测试没有通过。