Reputation: 1580
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?
Upvotes: 52
Views: 19720
Reputation: 3863
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)
Upvotes: 84
Reputation: 3314
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
Upvotes: 5