[英]NoMethodError: undefined method `chomp' for nil:NilClass while running Ruby Rspec on gets.chomp
這是我在此的頭一篇博文。 我對 Ruby 相當陌生,尤其是 RSpec,並且一直遇到問題。 我編寫了一個使用gets.chomp 接收玩家輸入的方法。 但是我在另一種方法中調用了這個方法
def prompt_move
loop do
@move = gets.chomp.to_i
return move if valid_move?(move)
puts "Invalid input. Enter a column number between 1 and 7"
end
end
def valid_move?(move)
@move.is_a?(Integer) && @move.between?(1, 7)
end
def play_round
print_board
prompt_player
@move = prompt_move
end
這是我的 RSpec 測試的代碼:
describe ConnectFour do
subject(:game) { described_class.new }
let(:player){ double(Player) }
describe '#prompt_move' do
context 'move is a valid input' do
before do
allow(game).to receive(:gets).and_return('3\n')
end
it 'returns move and stops the loop' do
error_message = 'Invalid input. Enter a column number between 1 and 7'
expect(game).to_not receive(:puts).with(error_message)
game.prompt_move
end
end
context 'when given one invalid input, then a valid input' do
before do
letter = 'a'
valid_input = '1'
allow(game).to receive(:gets).and_return(letter, valid_input)
end
it 'completes loop and displays error message once' do
error_message = 'Invalid input. Enter a column number between 1 and 7'
expect(game).to receive(:puts).with(error_message).once
game.prompt_move
end
end
end
如果我從 #play_round 中刪除 #prompt_move 方法,則測試通過,沒有任何問題。 但是,當我嘗試從 #play_round 中調用它時,它給了我 NoMethodError: undefined method `chomp' for nil:NilClass
我一直在努力找出導致此錯誤的原因,因此我們將不勝感激任何建議!
您正在執行類文件中的代碼。
new_game = ConnectFour.new
new_game.play_game
這將在您每次加載文件時運行,例如在測試時。 它將提示輸入並運行gets
。 它得到的是測試文件的代碼(出於某些 rspec 原因)。 這是無效的,所以它會一直運行gets
直到最終沒有更多輸入gets
返回nil
。
從你的類文件中刪除它。 像這樣的代碼應該在一個需要該類的單獨文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.