您需要在消息期望之前存根将接收消息的方法。
# RSpec < 3
Logger.stub(write: nil)
该stub
方法在 RSpec 3 中已弃用,而是使用以下方法之一
# RSpec >= 3
allow(Logger).to receive(:write).and_return(nil) # Most appropriate in this case
allow(Logger).to receive(:write) { nil } # Prefer block when returning something of a dynamic nature, e.g. a calculation
allow(Logger).to receive_messages(write: nil) # Prefer hash when stubbing multiple methods at once, e.g. receive_messages(info: nil, debug: nil)
方法存根是对对象(真实或测试替身)的指令,以响应消息返回已知值。
在这种情况下,告诉对象在收到消息时(第一次)Logger
返回值。nil
write
所以你的before
块应该是这样的
before do
Logger.stub(write: nil)
Logger.should_receive(:write).with('Log message 1')
end