3

HTTPartyの形式の応答を伴う要求があります。

#<HTTParty::Response:0x7fe078a60f58 
  parsed_response={"groups"=>
    [{"id"=>"11111", "name"=>"foo", "reference"=>nil},
     {"id"=>"22222", "name"=>"bar", "reference"=>nil}]
  }, 
  @response=#<Net::HTTPOK 200 OK readbody=true>, 
  @headers={
    "date"=>["Wed, 25 Nov 2015 13:05:27 GMT"], 
    "content-type"=>["application/xml; charset=utf-8"], 
    "content-length"=>["1752"], "connection"=>["close"],
    "status"=>["200 OK"], 
    "etag"=>["\"47f4a2f4b888491d07dc21b009e6f8a4\""],
    "x-frame-options"=>["DENY"], 
    "cache-control"=>["private, max-age=0, must-revalidate"],
    "p3p"=>["CP=\"CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE\""]}
> 

テストで web-mock を使用してこのリクエストをスタブする必要がありRspecます。これは私がしたことです:

stub_request(
      :get, url
    )
      .with(:headers => {'Content-Type'=>'application/xml'})
      .to_return(
        :status => 200,
        :body => {
          "groups"=>[
            {"id"=>"11111", "name"=>"foo", "reference"=>nil},
            {"id"=>"22222", "name"=>"bar", "reference"=>nil}
          ]
        },
        :headers => {...})

しかし、私はエラーが発生しています:

WebMock::Response::InvalidBody: must be one of: [Proc, IO, Pathname, String, Array]. 'Hash' given

body応答のレプリカを取得するために Webmock スタブを作成するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

3

content-typeさて、私は応答のからインスピレーションを得て、それを手に入れました:

"content-type"=>["application/xml; charset=utf-8"]

content-typeがであることを確認して、次のようにWebmockにも書式設定xmlを使用することにしました。xml

stub_request(
      :get, url
    )
      .with(:headers => {'Content-Type'=>'application/xml'})
      .to_return(
        :status => 200,
        :body =>
          '<groups type="array">
            <group>
              <id>11111</id>
              <name>foo</name>
            </group>
            <group>
              <id>22222</id>
              <name>bar</name>
            </group>
          </groups>',
        :headers => {
          "content-type"=>["application/xml; charset=utf-8"]
        })

そして、すべてがうまくいきました。

于 2015-11-25T14:59:41.277 に答える