如何测试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)