2010-08-03 4 views
2

Je commence à tester des stratégies et des moqueurs, et j'ai du mal à comprendre comment se moquer d'un appel à un service externe. Je suis sûr que c'est quelque chose de facile qui me manque, je ne sais pas exactement quoi. J'utilise la gemme Braintree pour facturer des services d'abonnement via la passerelle Braintree, et je voulais me moquer de la méthode de création du client et de la méthode de création d'abonnement dans la méthode create de mon UserController.Se moquer d'une API externe

Une méthode Customer.create ressemble à quelque chose comme ceci:

result = Braintree::Customer.create(
    :first_name => @creditcard.first_name, 
    :last_name => @creditcard.last_name, 
    :email => @user.email 
    :credit_card => { 
     ... 
     } 
    } 
) 

Ce retourne un objet Braintree :: Succès de résultat, avec les attributs du résultat traité.

Je me dis que je dois faire quelque chose comme:

Braintree::Customer.expects(:create).returns(...) 

Mais ce qui se passe dans la zone de retour? Ai-je besoin de créer mon propre objet Successful mocked avec les attributs d'un résultat traité faux, ou existe-t-il un moyen plus facile de faire tout cela?

Merci pour toute aide que vous pouvez fournir.

+1

Vous devez retourner un objet qui est ou « charlatans comme » un Braintree :: Client parfois je viens d'utiliser un OpenStruct – rogerdpack

+0

Ahh, je pense que c'est exactement le genre de chose que je suis à la recherche. Juste quelque chose pour imiter la même structure de base. Merci! – joeellis

Répondre

2

Vous pouvez retourner un OpenStruct comme suggéré dans le commentaire ou un stub ou mock, qui est à mon humble avis mieux et plus utile pour les tests, car vous pouvez facilement définir les attentes, comme ceci:

Braintree::Customer.expects(:create).returns(mock(:save => true)) 

La maquette de retour attendra le message save (ce qui peut ne pas avoir de sens dans ce cas, mais devrait vous donner l'idée).

Questions connexes