2017-08-03 22 views
1

我需要測試我的方法是正確的產生,實施是一樣的東西rspec的如何測試,如果我的收益率被稱爲

def method(val) 
    @attr = yield(val) 
end 

,我寫我的測試,如:

expect{ |b| x.method(&b) }.to yield_control.once 

問題是我需要@attr分配能夠完全完成我的測試。由spec生成的塊b不返回零,因此@attr變成零,這使得不可能得出規範。

我基本上需要塊返回它收到的相同值。

我試着創建一個lambda,期待它收到call但它不工作,我猜是因爲是塊。

l = ->(k,v) { v } # I set the return value 
expect(l).to receive(:call).once 
x.method(&l) 
# call is not called 

如何將l轉換爲塊時執行?

回答

0

我找到的解決方案是創建另一個從原始調用中調用的lambda並返回原始值。像這樣:

x = ->(v) { v } 
l = ->(k,v) { x.call(k, v) } 
expect(x).to receive(:call) 

Whoala