2016-07-14 9 views
0

Ich habe diese Methode für ein tic tac Schlepptau Spiel:rspec einen einzelnen Teil eines Verfahrens zu testen

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 

Ich versuche nur, um zu sehen, zu prüfen, ob die richtige Sache an das Endgerät puts'd ist. Ich habe diesen Test:

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 

Aber ich habe eine der game.start Gefühl („X“) Linie ist das, was diese Arbeit nicht macht. Wie kann ich den Test schreiben, um einfach zu überprüfen, ob die puts-Anweisung korrekt ausgegeben wird?

+0

Ein Refactoring-Vorschlag: anstelle des 'if',' else', benutze einfach 'puts' # {@ player2}: Bitte gib eine Nummer für deinen # {token} ein, um '' zu gehen. – lwassink

+0

gutes Aussehen. Danke für den Vorschlag, ich werde sicher sein, es zu implementieren, wenn ich beginne Refaktor –

+0

Ist der Test fehlgeschlagen? Was ist die Fehlermeldung? – Johnson

Antwort

0

Ich denke, ich habe es herausgefunden. Da meine Funktion zuerst etwas platzierte und dann die nächste Methode zum Ausführen anrief, brauchte ich eine andere expect-Anweisung. Mein bestandener Test ist als solcher:

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 

Ich bin nicht sicher, ob das richtig ist, aber der Test ist bestanden.