Итак, проблема в том, что в следующем тестовом примере RSpec "HERE2" является пустым массивом и пока не содержит предположение "e":
describe "Phase III" do
describe "#guess" do
let(:guesser) { ComputerPlayer.new(["reel","keel","meet"]) }
before(:each) { guesser.register_secret_length(4) }
context "when a guess has been made" do
it "returns the most common letter in the remaining #candidate_words" do
board = [nil, "e", "e", nil]
expect(guesser.guess(board)).to eq("l")
end
end
end
Причинаэто то, что вы еще не сказали ни одного кода, который угадали «е» (то есть вы не вызывали processed_most_common
с «е»).Вы только сообщаете guesser
, что доска находится в таком состоянии, что две средние буквы - это «е».
Если бы мы, например, изменили тест на:
context "when a guess has been made" do
it "returns the most common letter in the remaining #candidate_words" do
board = [nil, "e", "e", nil]
guesser.guess(board) # guesses 'e' and marks it as guessed.
expect(guesser.guess(board)).to eq("l")
end
end
Теперь у нас есть доска в таком состоянии, что она знает, что «е» находится в средних 2 позициях, и затем мы говорим ей угадать наиболее распространенную букву, которая все еще «е», потому что guesser
не знает, что он догадался (потому что не знает).После этого мы говорим угадать следующую букву, которая на этот раз является «l», и код «HERE2» правильно выводит, что «e» уже угадано (потому что оно есть).
Естьдругие способы исправить это, вам просто нужно убедиться, что processed_most_common
вызывается с "e", чтобы исправить проблему, которую вы видите.Но если у вас есть код, проходящий весь процесс угадывания, вы не пропустите ни одного другого шага, который можно было бы ожидать.