我有一个班级和方法......
class Player
attr_reader :boardpiece # i exist so game can read me
def initialize(letter)
@boardpiece = letter
end
def move_human(game, board)
@game_two = game
puts "human move..."
human_move = gets.chomp
human_symbol = human_move.to_sym
# look for move as key in board.grid
if board.grid.has_key?(human_symbol)
if board.grid[human_symbol] == " "
#puts "bingo"
@move = human_symbol
else
puts "spot taken...try again"
move_human(@game_two, board)
end
else
puts "invalid move...try again"
move_human(@game_two, board)
end
end
end
我正在尝试在RSpec中为它编写测试...
require 'game'
require 'board'
describe Player do
describe 'move_human' do
it 'receives cli input' do
player_h = Player.new('X')
player_c = Player.new('O')
board = Board.new
game = Game.new(player_h, player_c, board)
player_h.move_human('X', board).should_receive(:puts).with('human move...')
game.play
end
xit 'and returns a move value'
end
end
我将此错误视为输出....我做错了什么?
gideon@thefonso ~/Documents/ca_ruby/rubytactoe (development)$ rspec spec
Board
creates a blank board with nine spaces
can set the value of a specified cell
checks if a space is taken or not
drawgrid
draws a blank grid given no input
Player
move_human
human move...
receives cli input (FAILED - 1)
and returns a move value (PENDING: Temporarily disabled with xit)
Pending:
Player move_human and returns a move value
# Temporarily disabled with xit
# ./spec/player_spec.rb:16
Failures:
1) Player move_human receives cli input
Failure/Error: player_h.move_human('X', board).should_receive(:puts).with('human move...')
Errno::EISDIR:
Is a directory - spec
# ./lib/player.rb:21:in `gets'
# ./lib/player.rb:21:in `gets'
# ./lib/player.rb:21:in `move_human'
# ./spec/player_spec.rb:12:in `block (3 levels) in <top (required)>'
Finished in 0.00977 seconds
6 examples, 1 failure, 1 pending
Failed examples:
rspec ./spec/player_spec.rb:6 # Player move_human receives cli input
gideon@thefonso ~/Documents/ca_ruby/rubytactoe (development)$
答案 0 :(得分:2)
所以,你会说player_h.stub(:gets).and_return(“来自用户的一些输入”)。同样的事情也适用于你的should_receive(:puts)位。在调用这些方法的方法调用之前,您需要设置这些期望。因此,您的规范可能具有以下内容:
# These setup expectations for when "gets" and "puts" are called later...
player_h.stub(:gets).and_return("some input from the user")
player_h.should_receive(:puts).with("human move...")
# And then we run the method where those expectations above will get triggered:
player_h.move_human('X', board)
希望有所帮助。
答案 1 :(得分:1)
你可以为你的班级存出方法。
player_h.stub(:gets).and_return("Some string")