2012-04-02 51 views
32

是否存在僅針對特定參數存根方法的方法?事情是這樣的僅針對特定參數的Rspec存根方法

boss.stub(:fire!).with(employee1).and_return(true) 

如果任何其他僱員傳遞給boss.fire!方法,我會得到boss received unexpected message錯誤,但我真的想只是覆蓋特定參數的方法,並把它爲所有其他。

任何想法如何做到這一點?

回答

51

您可以添加一個缺省短線的fire!方法,該方法將調用原始的實現:

boss.stub(:fire!).and_call_original 
boss.stub(:fire!).with(employee1).and_return(true) 

Rspec的3語法(@ pk-nb)

allow(boss).to receive(:fire!).and_call_original 
allow(boss).to receive(:fire!).with(employee1).and_return(true) 
+0

謝謝安德烈,正是我在找的 – 2014-01-17 07:08:04

+0

乾淨的方式存根。謝謝。 – bragboy 2015-04-01 14:46:44

+12

與RSpec 3語法相同的東西: 'allow(boss).to receive(:fire!)。and_call_original allow(boss).to receive(:fire!)。with(employee1).and_return(true)' – 2015-05-07 17:31:11

2

你可以嘗試寫自己的存根方法,用這樣的代碼

fire_method = boss.method(:fire!) 
boss.stub!(:fire!) do |employee| 
    if employee == employee1 
    true 
    else 
    fire_method.call(*args) 
    end 
end