私はCLのスクリプトで何も動作しない、動作するテストを書く方法を理解できません。 @counterが9のとき、#tie_gameをトリガするはずですか?それは動作しません。 @counterは0に初期化され、プレーヤーがXまたはOをゲームボードに置くたびに1ずつインクリメントされます。 @counterがtie_gameを呼び出すと9回テストする方法はありますか?それが9未満ではそれはしないでしょうか?メソッドが呼び出されたらrspecテスト
def initialize(player1, player2)
@player1 = player1
@player2 = player2
@rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
@wins = [1, 2, 3], [4, 5, 6], [7, 8, 9],
[1, 4, 7], [2, 5, 8], [3, 6, 9],
[1, 5, 9], [3, 5, 7]
@selected_numbers = []
@counter = 0
end
def increment_counter
@counter += 1
if @counter == 9
tie_game?
end
end
def tie_game?
puts "The game was a tie. Nicely played #{@player1} & #{@player2}!"
play_again
end
私はこれを試しました:なぜそれがうまくいかないのか説明できますか?
describe "increment_counter" do
context "counter equals 9" do
it "calls tie_game?" do
game.instance_variable_set(:@counter, 9)
allow(game).to receive(:increment_counter)
#expect(STDOUT).to receive(:puts).with("The game was a tie. Nicely played #{@player1} & #{@player2}!")
expect(game).to receive(:tie_game?)
end
end
context "counter is less than 9" do
it "does not call tie_game?" do
game.instance_variable_set(:@counter, 4)
game.increment_counter
expect(game).not_to receive(:tie_game?)
end
end
end
回答を投稿した後で編集を見ました。それがあなたのために働いていない理由は、あなたが期待を設定した後であなたのコードを実際に呼び出すことは決してないということです。メッセージを送受信するかどうかをテストするときは、期待/実行順序を逆転させる必要があります。 – JasonK
大丈夫です。お返事ありがとうございました。確かに意味が分かります –