2010-03-09 9 views
1

Je souhaite remplacer une méthode uniquement pour un paramètre donné. Dire que j'ai une classeRSpec: Annulation des appels pour certains paramètres

class Foo 
    def bar(i) 
    i*2 
    end 
end 

Maintenant, je veux bouchonner la barre de méthode uniquement pour les appels avec une valeur de dire 3 et retourner la valeur de retour de la méthode dans tous les autres cas:

>> foo = Foo.new 
>> foo.bar(2) 
=> 4 
>> foo.stub!(:bar).with(3).and_return(:borked) 
>> foo.bar(3) 
=> :borked 
>> foo.bar(2) 
NoMethodError: undefined method `bar' for #<Foo:0x10538e360> 

est-il un moyen de déléguer l'exécution à la méthode en train d'être écrasée?

Répondre

2

Vous pouvez utiliser la méthode unstub!


>> foo = Foo.new 
>> foo.bar(2) 
=> 4 
>> foo.stub!(:bar).with(3).and_return(:borked) 
>> foo.bar(3) 
=> :borked 
>> foo.unstub!(:bar) 
>> foo.bar(2) 
NoMethodError: undefined method `bar' for #<Foo:0x10538e360> 
Questions connexes