如何测试Rspec中的块内的消息期望?
问题描述:
我试图在Rspec的一个块中测试消息的预期:如何测试Rspec中的块内的消息期望?
def a_method
ALibrary.execute do |batch|
batch.execute if a == 1
end
end
如果我在ALibrary
磕碰出execute
方法,我怎么测试的消息被送到内execute
?
allow(ALibrary).to receive(:execute).and_return(a_library_execute)
let(:a_library_execute) {double(execute:true)}
谢谢!
答
我相信你需要使用and_call_original
以确保您的reciever将调用原始。
看到这个:https://relishapp.com/rspec/rspec-mocks/v/2-14/docs/message-expectations/calling-the-original-method
ALibrary.should_receive:如果你想ALibrary.execute
返回自己的测试加倍你可以在and_yield
响应(执行).and_call_original
答
。
allow(ALibrary).to receive(:execute).and_yield(a_library_execute)