0

私はこれに3時間費やしましたが、助けが必要です.

私は RSpec の初心者で、「ゲーム」というクラスの振る舞いのテストを書こうとしています。

game.play が呼び出されたときに 3x3 グリッドが出力に送信されることをテストしたい....それだけです。私はRSpecの本を持っていて、これを理解しようと一生懸命努力していますが、困惑しています。キーと思われる場所を「FIXME」としてマークしました

ここに私のテストがあります...

require_relative '../spec_helper'

# the universe is vast and infinite....and...it is empty

describe "the game class" do
  it "must output a 3x3 game grid on the CLI" do
    player_h = double('human', :player_h => "X") # FIXME - do I stub or mock this?
    player_c = double('computer', :player_c => "O")# FIXME - do I stub or mock this?
    game = Game.new(player_h, player_c)

    #FIXME - how do I get the line below to read this as if it where coming from SDOUT on the cli?
    should_receive(:puts).with("a #{$thegrid[:a1]}|#{$thegrid[:a2]}|#{$thegrid[:a3]} \n")
    game.play
  end
  it "must have a human player" do
    pending "human is X"
  end
  it "must have a computer player" do
    pending "ai is O"
  end
end

そして、これが私がこのテストを構築しているクラスです(はい、それが逆であることは知っています...テストを書いてからコードを書くべきです...しかし、私が言ったように、私はこれに慣れていません...ゲームコード全体はすでに書かれています...私は本当に今RSpecを理解することに結びついています.)...

require_relative "player"
#
#Just a Tic Tac Toe game class
class Game
  #create players
  def initialize(player_h, player_c)
    #bring into existence the board and the players
    @player_h = player_h
    @player_c = player_c
    #value hash for the grid lives here
    $thegrid = {
        :a1=>" ", :a2=>" ", :a3=>" ",
        :b1=>" ", :b2=>" ", :b3=>" ",
        :c1=>" ", :c2=>" ", :c3=>" "
    }
    #make a global var for drawgrid used by player
    $gamegrid = drawgrid

  end
  #display grid on console
  def drawgrid

    board = "\n"
    board << "a #{$thegrid[:a1]}|#{$thegrid[:a2]}|#{$thegrid[:a3]} \n"
    board << "----------\n"
    board << "b #{$thegrid[:b1]}|#{$thegrid[:b2]}|#{$thegrid[:b3]} \n"
    board << "----------\n"
    board << "c #{$thegrid[:c1]}|#{$thegrid[:c2]}|#{$thegrid[:c3]} \n"
    board << "----------\n"
    board << "  1 2 3 \n"
    return board

  end
  #start the game
  def play
    #draw the board
    puts drawgrid
    #make a move
    #alternate player turns
  end

end

どんなガイダンスも大歓迎です。

4

1 に答える 1

0

RSpec ブックの IIRC では、テストでモック化された IO オブジェクトを渡しますがSTDOUT、プットを受け取ることが期待される場合にも機能するはずです。

STDOUT.should_receive(:puts).with("foo")
于 2012-08-31T00:01:05.100 に答える