6

eventmachine を使用して http 要求を受信する統合テストがあります。これは私の eventmachine ハンドラです:

class NotificationRecipient < EM::Connection
  def receive_data(data)
    EM.stop
  end
end

受信したリクエストのさまざまなプロパティをテストする必要があります。たとえば、このように受信した HTTP POST リクエスト文字列から json ペイロードを抽出したいとします。それを行うためのうまくパッケージ化された方法はありますか?

グーグルは、リクエストを作成してレスポンスを解析する多くの方法を見つけます。たとえば、rest-client はレスポンスを自動的に解析します。しかし、私はリクエストを受け取っているので、リクエストを作成していないため、これらの方法はどれもうまくいきません。

4

1 に答える 1

12

を利用しWEBrickます。WEBrick::HTTPRequestにはサービス可能なパーサーがあり、IOそのparseメソッドにオブジェクトを渡すだけで、操作できるオブジェクトを手に入れることができます。

この例では、文字列に JSON 本文を含む POST 要求を宣言しStringIO、オブジェクトとしてアクセスできるようにするために使用しIOます。

require 'webrick'
require 'stringio'

Request = <<-HTTP
POST /url/path HTTP/1.1
Host: my.hostname.com
Content-Type: application/json
Content-Length: 62

{
  "firstName": "John",
  "lastName": "Smith",
  "age": 25
}
HTTP

req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP)
req.parse(StringIO.new(Request))

puts req.path
req.each { |head| puts "#{head}:  #{req[head]}" }
puts req.body

出力

/url/path
host:  my.hostname.com
content-type:  application/json
content-length:  62
{
  "firstName": "John",
  "lastName": "Smith",
  "age": 25
}
于 2013-07-11T17:29:07.390 に答える