私はこのメソッドをより大きなクラスの一部として持っています。私はそれのテストを書き込もうとしていますが、rspecは初めてで、ちょっと困惑しています... 9.timesループですべてをコメントアウトすれば、「drawgrid」をテストできます。しかし、そのコードのコメントを外すと、現在のテストは失敗します。playメソッドが...ゲームを実行することをテストする必要があります。それが「ドローグリッド」を置くこと...各ターンの後に「ドローグリッド」を置くことでゲームシーケンスを9回実行します。しかし、これを行う方法がわかりません。どんなポインタでも大歓迎です。
以下は再生方法と現在の仕様です
def play
#draw the board
puts drawgrid
#make a move
turn = 0
9.times do
if turn.even?
@player = @player_h.move_human("X", @board)
@move = @player.to_sym
@marker = @player_h.boardpiece
does_move_exist(@move,@marker)
is_a_human_win(@board)
else
@player = @player_c.move_computer("O", @board)
@move = @player
@marker = @player_c.boardpiece
does_move_exist(@move,@marker)
is_a_computer_win(@board)
end
puts drawgrid
turn += 1
end # 9.times ends
end
現在の仕様...
describe 'play method' do
it 'draws the game grid' do
@player_human = Player.new('X')
@player_computer = Player.new('O')
@board = Board.new
@game = Game.new(@player_human, @player_computer, @board)
@game.should_receive(:puts).with("\na | | \n----------\nb | | \n----------\nc | | \n----------\n 1 2 3\n")
@game.play
end
end
describe '9.times' do
it 'runs game sequence 9 times...once per board spot' do
@player_human2 = Player.new('X')
@player_computer2 = Player.new('O')
@board2 = Board.new
@game2 = Game.new(@player_human2, @player_computer2, @board2)
turn = 0
9.times do
if turn.even?
@player_human2.should_receive(:puts).with("human move...")
@player_human2.stub(:gets).and_return("b2")
else
@player_human2.should_receive(:puts).with("computer move...")
@player_human2.stub(:gets).and_return("a1")
end
turn += 1
end
@game2.play
end
end