2

次のようにリクエストスタブを登録しています。

url = "http://www.example.com/1"
stub_request(:get, url).
  with(body: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project>\n    <id>1</id>\n</project>\n",
       headers: {
         'Accept' => 'application/xml',
         'Content-type' => 'application/xml',
         'User-Agent' => 'Ruby',
         'X-Trackertoken' => '12345'
       }).
  to_return(status: 200, body: '', headers: {})

何らかの理由で実行するbundle exec rspec specと、リクエストがまだ登録されていないとスペックが失敗します。登録されたスタブはこれです、

stub_request(:get, "http://www.example.com/1").
  with(body: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project>\n    <id>1</id>\n</project>\n",
       headers: {
         'Accept' => 'application/xml',
         'Content-type' => 'application/xml',
         'User-Agent' => 'Ruby',
         'X-Trackertoken' => '12345'
       })

to_returnパーツが欠落していることに注意してください

ヘッダーを空の文字列に置き換えようとしましたがbody、リクエストスタブは正しく登録されていますが、空の文字列以外の値を本体から期待しているため、仕様は失敗します。したがって、bodyに値を割り当てることが非常に重要です。

私の仕様では、このメソッドを呼び出しています。

def find(id)
  require 'net/http'
  http = Net::HTTP.new('www.example.com')
  headers = {
    "X-TrackerToken" => "12345",
    "Accept"         => "application/xml",
    "Content-type"   => "application/xml",
    "User-Agent"     => "Ruby"
  }
  parse(http.request(Net::HTTP::Get.new("/#{id}", headers)).body)
end

なぜこれが起こっているのかについてのアイデアはありますか?

ありがとう。

4

1 に答える 1

6

問題は、スタブがGETリクエストを空でない本文と一致させている<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project>\n <id>1</id>\n</project>\nことですが、リクエストを行うと本文が含まれていないため、スタブが見つかりません。

ここで何の体が何であるかについてあなたは混乱していると思います。withメソッド引数の本文は、応答の本文ではなく、作成しているリクエストの本文です。おそらく必要なのは、次のようなスタブです。

url = "http://www.example.com/1"
stub_request(:get, url).
  with(headers: {
         'Accept' => 'application/xml',
         'Content-type' => 'application/xml',
         'User-Agent' => 'Ruby',
         'X-Trackertoken' => '12345'
       }).
  to_return(status: 200,
            body: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project>\n    <id>1</id>\n</project>\n",
            headers: {})
于 2012-08-31T08:27:59.577 に答える