问题
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?
回答1:
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)
回答2:
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
来源:https://stackoverflow.com/questions/9972964/rspec-stubbing-method-for-only-specific-arguments