2
考慮以下代碼:我怎樣才能測試一個「解除引用」的lambda傳遞給一個方法?
def thing_incrementer
lambda do
self.foo +=1
save!
end
end
def increment_thing
with_lock &thing_incrementer
end
我如何寫一個測試,測試了thing_incrementer
與with_lock
爲塊通過呢?如果我只是想測試它作爲參數傳遞(無領導&
)我會做到這一點:
let(:the_lambda){ lambda{} }
x.stub(:thing_incrementer){ the_lambda }
x.should_receive(:with_lock).with(the_lambda)
x.increment_thing
謝謝!幾個問題。 1)「如果你想傳遞一個lambda作爲參數」 - 你爲什麼提到這個?我的問題看起來可能是這樣嗎? (這不是)2)我將如何測試'the_lambda'是以proc形式傳遞給'with-lock'的? (我不認爲你的例子涵蓋這個,或者我錯過了它......) – 2015-02-09 21:20:07
1)我剛纔提到它,因爲有時你想通過一個proc(或多個特效)作爲參數,差異只是傳遞他們直接與他們作爲塊綁定。 2)你只要在expect塊中測試'blk == lambda',但你可能必須使用實際的lambda而不是double,因爲它需要可綁定。 – 2015-02-09 21:22:03
我只是改變了我的例子使用實際的lambda - 想修改你的答案來檢查這是通過的嗎? – 2015-02-09 21:23:55