Comment créer un talon de méthode RSPEC pour permettre une réponse d'une méthode qui prend la clé de hachage pour renvoyer sa valeur?
Ceci est la ligne que je veux tester P>
allow(menu).to receive(:menu_items).and_return(2.0) allow(menu).to receive(:menu_items).with(item).and_return(2.0) allow(menu).to receive(:menu_items).with("item").and_return(2.0) allow(menu).to receive(:menu_items).with([item]).and_return(2.0)
4 Réponses :
Vous allez un peu trop profond avec votre talon, pense à cela à la place
allow(menu).to receive(:menu_items).and_return({Beer: 2.0})
La ligne i suppose Cela signifie que votre talon nécessite un peu plus de travail. p> Note, l'erreur p> est parce que vous utilisiez menu.menu_items [élément] code> est en réalité composée par 3 appels de méthode.
[] code> est un appel à la méthode
[] code>
sur le hachage code> renvoyé par Menu_items code>.
menu.menu_items < / code> renvoie un
hachage code> et non un tableau code>, indiqué dans l'élément de spécification code> est un symbole
code>. p>
élément code> dans la spécification, mais
élément code> n'est pas défini en dehors de votre méthode. p> p>
Merci à la réponse de @ Simonecarletti, j'ai pu facilement faire face à une instance de Code Je veux imiter avec un talon: p> Et les parties saillantes du test double: p> Code complet: p> Publicactivité code>. J'ajoute cette réponse uniquement comme une instruction plus bref (re) du problème de l'OP et la simplicité de la solution.
Vous pouvez faire ceci:
allow(menu.menu_items).to receive(:[]).with(1).and_return({Beer: 2.0})
Semble comme une façon fragile de tester les choses, mais si vous devez, alors avez
MENU.MENU_ITERMS CODE> Renvoyer certains
Mock_menu_items Code> et Stub
Mock_menu_items Code> Pour recevoir
: [] code> avec
élément code> et retourner
2.0 code>.