2016-06-03 19 views
2

Octokit Antworten vom Typ sind Sawyer::ResponseWie richtig Antwort für Antworttext eines Octokit Anfragen webmock replizieren Stummel

Sie sehen wie folgt aus:

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

Ich versuche, meine Anfrage wie so

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

In meinem Code rufe ich dann response.content, also möchte ich in der Lage sein, den Inhalt von der Antwort zu bekommen.

ich zur Zeit die Fehlermeldung: ‚WebMock :: Antwort :: InvalidBody: muss einer der folgenden sein: [Proc, IO, Pathname, String, Array]. 'Hash' gegeben '. Was ist das richtige Format für response_body? Wenn ich es zu einem json mache, kann ich dann response.content nicht auf das Objekt in meinem Code anwenden.

Antwort

0

Sie übergeben einen Hash als die erwartete Antwort und Webmock weiß nicht, worüber das codiert werden soll (see this Webmock issue). Wie Sie bereits erwähnt haben, könnten Sie response_body.to_json verwenden, aber Sie könnten dann nicht die Punktnotation verwenden, um auf Daten zuzugreifen.

Da Sie RSpec verwenden, würde ich den Einsatz von Test Doubles machen Sie ein Sawyer::Resource Objekt haben, so zu tun:

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

Sie sollten dann in der Lage sein, Daten für den Zugriff auf die Punktnotation verwenden, wie Sie es mit der tatsächliche Antwort.

+1

Nette Idee, dachte ich auch, aber auf der doppelten gleichen Fehler. 'WebMock :: Antwort :: InvalidBody: muss einer der folgenden sein: [Proc, IO, Pathname, String, Array] 'RSpec :: Mocks :: Double' given' –

+0

Gah.! Ich habe einen Tippfehler gemacht. Der 'response_body' sollte ein Array mit einem Element sein. Dieses Element wäre dann das Testdoppel. Ich werde meine Antwort aktualisieren. –

+0

Das ist alles sehr gut und wird funktionieren, aber jetzt ist der im Test befindlichen Code erhalten wir ein Array, wenn es in der Regel einen Hash erhalten würde. Tatsächlich ist das Double nicht erforderlich, wenn der Hash innerhalb des Arrays zurückgegeben wird, da dies ein zulässiger Rückgabetyp ist. –

1

Ich hatte genau dieses Problem, und am Ende löste es durch den Octokit Client Anstoßen aus. Um die Testabdeckung in Octokit zu überprüfen, befolgte ich die Anweisungen here.

Octokit-Anfragen werden alle mit VCR getestet. Wenn Sie also mit der Testabdeckung zufrieden sind, ist es relativ sicher, Octokit :: Client in Ihrer Anwendung auszugeben.