Метод Rspec stubbing для только определенных аргументов
Есть ли способ заглушить метод только для определенных аргументов. Что-то вроде этого
boss.stub(:fire!).with(employee1).and_return(true)
Если какой-либо другой сотрудник передан методу boss.fire!
, я получу ошибку boss received unexpected message
, но мне бы очень хотелось только переопределить метод для конкретного аргумента и оставить его для всех остальных.
Любые идеи, как это можно сделать?
Ответы
Ответ 1
Вы можете добавить заглушку по умолчанию для метода 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)
Ответ 2
Вы можете попробовать написать свой собственный метод stubbing, с кодом, подобным этому
fire_method = boss.method(:fire!)
boss.stub!(:fire!) do |employee|
if employee == employee1
true
else
fire_method.call(*args)
end
end