44 votes

Méthode de remplacement Rspec pour des arguments spécifiques uniquement

Existe-t-il un moyen de stub méthode pour uniquement des arguments spécifiques. Quelque chose comme ça

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

Si un autre employé est passé à la boss.fire! , j'obtiendrai une boss received unexpected message , mais ce que je voudrais vraiment, c'est simplement remplacer la méthode pour un argument spécifique, et la laisser pour tous les autres.

Des idées comment cela peut être fait?

71voto

Andrey Chernih Points 628

Vous pouvez ajouter un stub par défaut pour la fire! qui appellera l'implémentation d'origine :

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

Syntaxe Rspec 3 (@pk-nb)

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

2voto

kr00lix Points 2056

Vous pouvez essayer d'écrire votre propre méthode de stub, avec un code comme celui-ci

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X