RSpec: Stub chaînes avec des arguments?
Demandais juste si/comment les arguments peuvent être passés en rspec stub chaînes. Pour donner un exemple, supposons que j'ai l'action suivante:
def index
@payments = Payment.order(:updated_at).where(:paid => true)
@bad_payments = Payment.order(:some_other_field).where(:paid => false)
end
Dans mon contrôleur spec, j'aimerais être en mesure d'écraser les deux méthodes et de retourner des résultats différents. Si seulement le @payments
terrain ont été dans l'action, je serais d'utiliser quelque chose comme
Payment.stub_chain(:order, :where) { return_this }
Mais bien sûr, qui va retourner la même valeur pour @bad_payments
.
Donc, bref, comment dois-je inclure la :updated_at
et :paid => true
comme stub conditions?
- Regardez cette réponse si cela aide.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser ceci:
with
argument est ignorée. Essayez de la remplacer par quelque chose qui doit échouer et va encore passer.Avec
rspec > 3
utiliser cette syntaxe:au lieu de
stub_chain
.Lire plus sur les chaînes de messages dans la documenation. Et ici est l'argument de rapprochement de la documentation.
with
est ignoré.Vous pouvez imbriquer talon bloc. Le bloc peut accepter des arguments et la valeur de retour est utilisée comme fonction de la valeur de retour.
- Je utiliser
tap
parce questub
ne retourne pas le destinataire de l'appel. Le se moquer de créé pardouble
est retournée comme résultat de la méthodeorder
, quiwhere
méthode est stub de nouveau.