Sur la méthode dite de la double, les attentes à propos de l'argument
Question
J'ai créé un double, je suis l'exécution de code qui va appeler une méthode et un énorme hachage comme un argument, je veux vérifier une des clés de l'argumentation, et ensuite de retour à un spécifique de hachage.
C'est ce que je fais
before :each do
allow(@my_double).to receive(:do_stuff).and_return({stuff: 42})
end
it "can do stuff" do
expect(@my_double).to receive(:do_stuff) do |arg|
expect(arg).to be_a(Hash)
expect(arg[:my_arg]).to eq(3)
end
TestObject.stuff() # will invoke do_stuff on the double
end
Ce qui se passe est la première fois do_stuff
est appelée, elle retourne true
qui est le résultat de la receive
bloc, mais sur les appels suivants(testé dans pry), il renvoie correctement {stuff: 42}
mais depuis le premier appel est faux, ma méthode exceptions quand il essaie de l'appeler[:stuff]
sur le retour.
Je suis en train de laisser allow
définir le comportement de la double donc je ne veux pas mettre le retour dans le bas de la expect
..mais est-il un moyen de contourner cela?
La solution
Compris la réponse est d'utiliser un encore sans-papiers argument matcher hash_including
un peu comme mon premier commentaire
expect(@my_double).to receive(:do_stuff).with(hash_including(my_arg: 3))
Cela fonctionne très bien.