私はSinatraアプリケーションに、本体の一部としてバイナリデータを受け取るエンドポイントを持っています。 、そして、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
シナトラに、私は次のように、これらのリクエスト・パラメータおよびバイナリデータを受信して、モデルに渡したエンドポイントを持つことになります。それにデータを送信し、他のアプリケーションでは、次のようになりファラデー要求を持っていますそう:私はRack::Test
ヘルパーを使用して、このエンドポイントをテストしようとすると
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
、私は奇妙な状況で終わります。このエンドポイントを適切にテストするために、適切なモックを作成できないようです。 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
が正しくIセットhost
とverification
設定に設定されているが、本体はまた、(payload = request.body.read
を通して検査)paramsは代わりのバイナリに設定されています。
は、バイナリが適切にリクエストのボディに設定され、パラメータがまだ適切にリクエストパラメータに設定されているように、モックをセットアップするための別の方法はありますか?