【发布时间】:2016-07-14 14:23:17
【问题描述】:
我不知道如何编写一个可以工作的测试,它也不会在我的 CL 脚本中运行任何东西。当@counter 为9 时,应该触发#tie_game?但它不起作用。 @counter 被初始化为 0 并且每次玩家在游戏板上放置 X 或 O 时递增 1。一旦@counter 为 9,我如何测试它调用 tie_game?而当它小于9时它不会?
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
【问题讨论】:
-
我在发布答案后看到了您的编辑。它对您不起作用的原因是您在设置期望值后从未真正调用过您的代码。在测试是否发送和接收消息时,您必须颠倒期望/运行顺序。
-
好的太棒了。非常感谢您的帮助,这肯定更有意义