Is there a way to stub method for only specific arguments. Something like this
boss.stub(:fire!).with(employee1).and_return(true)
If any other employee is passed to boss.fire!
method, I'll get boss received unexpected message
error, but what I would really like is just to override the method for specific argument, and leave it be for all others.
Any ideas how this can be done?
You can add a default stub for the fire!
method which will call original implementation:
boss.stub(:fire!).and_call_original boss.stub(:fire!).with(employee1).and_return(true)
Rspec 3 Syntax (@pk-nb)
allow(boss).to receive(:fire!).and_call_original allow(boss).to receive(:fire!).with(employee1).and_return(true)
You can try write your own stubbing method, with code like this
fire_method = boss.method(:fire!) boss.stub!(:fire!) do |employee| if employee == employee1 true else fire_method.call(*args) end end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With