0

私の Sinatra アプリケーションには、本文の一部としてバイナリ データを受け取るエンドポイントがあります。データを送信する他のアプリケーションには、次のようなファラデー リクエストがあります。

    connection = Faraday.new(url: "https://example.com/post_data") do |conn|
      conn.request :multipart
      conn.adapter :net_http
      conn.headers['Content-Type'] = 'octet/stream'
    end

    @response ||= connection.post do |req|
      req.params = { :host => host,
                     :verification => "false"}
      req.body = my_base64_encoded_binary
    end

次に、Sinatra で、これらの要求パラメーターとバイナリ データを受け取り、それをモデルに渡すエンドポイントを次のように作成します。

post '/post_data' do
  request.body.rewind
  payload = request.body.read

  raise Sinatra::NotFound unless payload and params[:host]
  output = MyOutput.new(params, payload)

  content_type 'application/json'
  body output.data
end

ヘルパーを使用してこのエンドポイントをテストしようとするRack::Testと、奇妙な状況に陥ります。このエンドポイントを適切にテストするために、適切なモックを作成できないようです。PostMan を使用したいくつかの手動テストに基づいて、エンドポイントが適切に動作することを確信しています。私を支えているのはただのテストです。仕様は次のとおりです。

 it "should return a json response" do
    post(url, :host => host, :verification => "false") do |req|
      req.body = [my_binary]
      req.content_type = "application/octet-stream"
    end

    expect(last_response.status).to eq(200)
    expect(last_response.content_type).to eq("application/json")
  end

そして、テストで着信リクエストがどのように見えるかを調べると、適切な本文が含まれていません。私が設定したおよび設定にparams適切に設定されていますが、本体もバイナリではなくパラメーターに設定されています ( を介して検査)。hostverificationpayload = request.body.read

バイナリがリクエストの本文に適切に設定され、パラメーターがリクエストパラメーターに適切に設定されるように、モックを設定する別の方法はありますか?

4

1 に答える 1