Comment faire valoir certains de la méthode est appelée avec Ruby minitest cadre?
Je veux tester si une fonction appelle d'autres fonctions correctement avec minitest Ruby, mais je ne peux pas trouver un bon assert
de test à partir de l' doc.
Le code source
class SomeClass
def invoke_function(name)
name == "right" ? right () : wrong ()
end
def right
#...
end
def wrong
#...
end
end
Le code de test:
describe SomeClass do
it "should invoke right function" do
# assert right() is called
end
it "should invoke other function" do
# assert wrong() is called
end
end
Vous devez vous connecter pour publier un commentaire.
Avec minitest vous utilisez
expect
méthode pour définir les attentes pour une méthode à appeler sur un objet fantaisie commeSi vous souhaitez définir les attentes, avec des paramètres et valeurs de retour alors:
Et de l'objet concret de la sorte:
must_send
lors de l'utilisation deminitest/spec
assert_send
n'est pas approprié ici. L'OP veut tester queright
est appelée lorsqueinvoke_function
est appelé. En outre,obj.verify
est nécessaire pour assurer laright
est appelée sur l'objet fantaisie dans la première partie de cette réponse. Pour tous ceux qui lisent ceci, veuillez vous assurer que votre échec des tests avant de vous les faire passer.invoke_function
appelé?Minitest a un spécial
.expect :call
pour vérifier si une méthode est appelée.Malheureusement cette fonction n'est pas documentée, très bien. J'ai trouvé à ce sujet ici: https://github.com/seattlerb/minitest/issues/216
Selon l'exemple donné, il n'y a pas d'autre délégué de classe, et que vous voulez vous assurer que la méthode est appelée correctement à partir de la même classe. Puis ci-dessous extrait de code devrait fonctionner:
L'idée est de stub [method_expect_to_be_called] en retournant un simple vrai valeur, et dans le demi-bloc affirmer c'est en effet d'être appelé et le retour de l' vrai valeur. Pour talon l'autre méthode inattendus, c'est juste pour s'assurer qu'il n'est pas appelé.
Remarque: assert_send ne fonctionne pas correctement. Veuillez vous référer à officiel doc.
En fait, la déclaration ci-dessous va passer, mais cela ne signifie pas qu'il fonctionne comme prévu: