2016-06-03 1 views
2

réponses Octokit sont de type Sawyer::ResponseComment répliquées correctement le corps de réponse d'une réponse de demandes de Octokit pour webmock Stub

Ils ressemblent à ceci:

{:name=>"code.py", 
:content => "some content"} 

Je suis en train de bouchonner ma demande comme si

reponse_body = {:content => "some content"} 
stub_request(:any, /.*api.github.com\/repos\/my_repo\/(.*)\/code.py/).to_return(:status => 200, :body => response_body) 

Dans mon code, j'appelle ensuite response.content, donc je veux être en mesure d'obtenir le contenu de la réponse.

Je reçois actuellement l'erreur: 'WebMock :: Response :: InvalidBody: doit être l'un de: [Proc, IO, Pathname, String, Array]. 'Hash' donné '. Quel est le bon format pour response_body? Si je le transforme en json, je ne peux alors pas faire de response.content sur l'objet dans mon code.

Répondre

0

Vous transmettez un hachage comme réponse attendue et Webmock ne sait pas à quoi il doit être codé (see this Webmock issue). Comme vous l'avez mentionné, vous pouvez utiliser response_body.to_json, mais vous ne pourrez pas utiliser la notation pointée pour accéder aux données.

Puisque vous utilisez RSpec, je me sers de Test Doubles de prétendre que vous avez un objet Sawyer::Resource:

response_body = 
    [ 
    double("Sawyer::Resource", 
     { 
     :name=>"code.py", 
     :content => "some content" 
     }) 
    ] 

Vous devriez alors être en mesure d'accéder aux données en utilisant la notation de points comme vous le feriez avec le réponse réelle.

+1

Bonne idée, je le pensais aussi, mais j'obtiens la même erreur sur le double. 'WebMock :: Response :: InvalidBody: doit être l'un des suivants: [Proc, IO, Chemin, Chaîne, Array]. 'RSpec :: Mocks :: Double' donné' –

+0

Gah! J'ai fait une faute de frappe. Le 'response_body' devrait être un tableau avec un élément. Cet élément serait alors le double du test. Je vais mettre à jour ma réponse. –

+0

C'est très bien et ça marchera, mais maintenant le code testé nous recevons un tableau, quand il recevrait normalement un hachage. En fait, le double n'est pas requis si le hachage est retourné dans le tableau, car il s'agit d'un type de retour autorisé. –

1

J'ai eu ce problème exact, et à la fin l'ai résolu en écrasant le client Octokit. Afin de vérifier la couverture de test dans Octokit, j'ai suivi les instructions here.

Les demandes Octokit sont toutes testées avec VCR, donc en supposant que vous êtes satisfait de leur couverture de test, il est raisonnablement sûr de boucher Octokit :: Client dans votre application.