2016-07-14 3 views
0

у меня есть этот метод для Tic Tac датчиком игры: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}: Пожалуйста, введите число для вашего # {токена}, чтобы перейти к' '. – 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 

Я не уверен, что это правильно, но тест прошел.

Смежные вопросы