9
votes

Le talon RSPEC pour autoriser [Hash_Key] à passer

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)


1 commentaires

Semble comme une façon fragile de tester les choses, mais si vous devez, alors avez MENU.MENU_ITERMS Renvoyer certains Mock_menu_items et Stub Mock_menu_items Pour recevoir : [] avec élément et retourner 2.0 .


4 Réponses :


0
votes

Vous allez un peu trop profond avec votre talon, pense à cela à la place

allow(menu).to receive(:menu_items).and_return({Beer: 2.0})


0 commentaires

7
votes

La ligne menu.menu_items [élément] est en réalité composée par 3 appels de méthode. [] est un appel à la méthode [] sur le hachage renvoyé par Menu_items .

i suppose menu.menu_items < / code> renvoie un hachage et non un tableau , indiqué dans l'élément de spécification est un symbole .

Cela signifie que votre talon nécessite un peu plus de travail. xxx

Note, l'erreur xxx

est parce que vous utilisiez élément dans la spécification, mais élément n'est pas défini en dehors de votre méthode.


0 commentaires

0
votes

Merci à la réponse de @ Simonecarletti, j'ai pu facilement faire face à une instance de Publicactivité . J'ajoute cette réponse uniquement comme une instruction plus bref (re) du problème de l'OP et la simplicité de la solution.

Code Je veux imiter avec un talon: xxx

Et les parties saillantes du test double: xxx

Code complet: xxx


0 commentaires

6
votes

Vous pouvez faire ceci:

allow(menu.menu_items).to receive(:[]).with(1).and_return({Beer: 2.0})


0 commentaires