2012-04-02 12 views
32

¿Hay alguna manera de que el método stub solo tenga argumentos específicos? Algo como estoMétodo de borrado Rspec solo para argumentos específicos

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

Si cualquier otro empleado se pasa al método boss.fire!, voy a conseguir boss received unexpected message error, pero lo que realmente me gustaría es sólo para reemplazar el método de argumento específico, y dejar que sea para todos los demás .

¿Alguna idea de cómo se puede hacer esto?

Respuesta

51

Puede agregar un talón por defecto para el método fire! que llamar implementación original:

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

Rspec 3 Sintaxis (@ pk-nb)

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

gracias andrey, exactamente lo que estaba buscando –

+0

Manera limpia de trozo. Gracias. – bragboy

+12

Lo mismo con la sintaxis de RSpec 3: 'allow (boss) .to receive (: fire!). And_call_original allow (boss) .to receive (: fire!). With (employee1) .and_return (true)' –

2

Usted puede intentar escribir su propio método tropezar, con código como este

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