在阅读 The RSpec Book 时,我遇到了as_null_object方法。我不明白这本书为什么需要它的解释:
...最简单的方法是告诉双重输出只听我们告诉它期望的消息并忽略任何其他消息。
但是为什么示例代码会失败?当我们double('output')
在每个示例中调用时,我们不是为每个示例创建一个新的双对象并发送一条消息吗?
我想要的是对示例代码失败的原因以及如何as_null_object
解决问题的更深入的解释(比书本)。
it "sends a welcome message" do
output = double('output')
game = Game.new(output)
output.should_receive(:puts).with('Welcome to Codebreaker!')
game.start
end
it "prompts for the first guess" do
output = double('output')
game = Game.new(output)
output.should_receive(:puts).with('Enter guess:')
game.start
end
这本书试图在前面的部分解释错误的原因,但我还是不明白这个解释。
我们在第一个示例中告诉替身期待
puts
“欢迎来到 Codebreaker!” 我们已经满足了这个要求,但我们只告诉它期待“欢迎使用 Codebreaker!” 它对“输入猜测:”一无所知同样,第二个示例中的 double 期望“输入猜测:”,但它收到的第一条消息是“欢迎使用 Codebreaker”。