B S*_*ven 10 ruby rspec expectations sinatra
规格:
before do
Logger.should_receive( :write ).with 'Log message 1'
end
it 'works' do
get '/'
end
Run Code Online (Sandbox Code Playgroud)
Sinatra App:
get '/'
Logger.write( 'Log message 1' )
Logger.write( 'Log message 2' )
end
Run Code Online (Sandbox Code Playgroud)
由于"Log message 2",此规范失败.如何告诉RSpec忽略任何其他消息,并只测试预期的消息?
您需要在消息预期之前存根将接收消息的方法.
# RSpec < 3
Logger.stub(write: nil)
Run Code Online (Sandbox Code Playgroud)
该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)
Run Code Online (Sandbox Code Playgroud)
方法存根是对对象(真实或测试双)的指令,以响应消息返回已知值.
在这种情况下,告诉Logger
对象nil
在收到write
消息时返回值(第一次).
所以你的before
块应该是这样的
before do
Logger.stub(write: nil)
Logger.should_receive(:write).with('Log message 1')
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2183 次 |
最近记录: |