Rspec 3.0 Comment simuler une méthode de remplacement du paramètre, mais avec pas de valeur de retour?
J'ai beaucoup cherché et juste ne peut pas comprendre cela, il semble bien que de base. Voici une façon simplifiée exemple de ce que je veux faire.
Créer une méthode simple qui fait quelque chose, mais ne retourne rien, comme:
class Test
def test_method(param)
puts param
end
test_method("hello")
end
Mais dans mon rspec test j'ai besoin de passer un paramètre différent, comme "au revoir" au lieu de "bonjour." Je sais que cela a à voir avec les talons et se moque, et je l'ai regarder sur la documentation, mais ne peut pas le comprendre: https://relishapp.com/rspec/rspec-mocks/v/3-0/docs/method-stubs
Si je fais:
@test = Test.new
allow(@test).to_receive(:test_method).with("goodbye")
il me dit d'éteindre une valeur par défaut mais je ne peux pas comprendre comment le faire correctement.
Message d'erreur:
received :test_method with unexpected arguments
expected: ("hello")
got: ("goodbye")
Please stub a default value first if message might be received with other args as well.
Je suis à l'aide de rspec 3.0, et appeler quelque chose comme
@test.stub(:test_method)
n'est pas autorisé.
OriginalL'auteur user3060126 | 2014-04-18
Vous devez vous connecter pour publier un commentaire.
Pour votre exemple, puisque vous n'avez pas besoin de tester le résultat de
test_method
, seulement queputs
est appelée en passant dansparam
, je voudrais juste tester par la mise en place de l'attente et de l'exécution de la méthode:Ce qu'il semble que vous êtes tenté de faire, c'est de créer un test spy sur la méthode, mais je pense que vous êtes en train de configurer la méthode de stub un niveau trop élevé (sur
test_method
lui-même au lieu de l'appel àputs
à l'intérieur detest_method
). Si vous placez le tampon sur l'appel àputs
, vos tests doivent passer:expect(test).to receive(:puts)
- j'ai pensé que vous ne pourriez appeler la droite de la méthode (test_method
ici) donc c'est bon à savoir. À la fin, mon problème était plus complexe et j'ai décidé que je devais modifier mon code pour définir la méthode que retourner une valeur, ce qui est probablement une meilleure pratique de toute façon. Et puis il est facile à utiliserallow(test).to receive(:test_method).and_return('goodbye')
. Je suis sûr qu'il y a une autre manière, en utilisant une partie de cela, et il est également bon de savoir à propos de test espions - je n'avais pas rencontré avant.OriginalL'auteur Paul Fioravanti
Comment définir une valeur par défaut qui est expliqué au
and_call_original
peut configurer une réponse par défaut qui peut être surchargée pour certains argsSource où j'ai appris à connaître à ce sujet peut être trouvé à https://makandracards.com/makandra/30543-rspec-only-stub-a-method-when-a-particular-argument-is-passed
OriginalL'auteur Jignesh Gohel