6

私は現在、Rails/rails-api を利用した JSON API を構築しています。PATCH リクエストを介して JSON 送信を受け入れるルートと、生の request/JSON にアクセスする必要がある before フィルターがあります。

テスト目的で、フィルターの前に次を追加して、問題を表示しました。

before_filter do
  puts "Raw Post: #{request.raw_post.inspect}"
  puts "Params: #{params.inspect}"
end

次の curl リクエストは意図したとおりに機能します。

curl -X PATCH -H "Content-Type: application/json" -d '{"key":"value"}' http://localhost:3000/update

# Raw Post: "{\"key\":\"value\"}"
# Params: {"key"=>"value", "action"=>"update", "controller"=>"posts"}

ただし、このメソッドのテストに失敗しました。次の呼び出しはどれも機能しません。

  • Params は含まれていますが、JSON が転送されたわけではありません

    test 'passing hash' do
      patch :update, { key: "value" }
    end
    
    # Raw Post: "key=value"
    # Params: {"key"=>"value", "controller"=>"posts", "action"=>"update"}
    
  • Params が含まれていますが、JSON が転送されたわけではありません

    test 'passing hash, setting the format' do
      patch :update, { key: "value" }, format: :json
    end
    
    # Raw Post: "key=value"
    # Params: {"key"=>"value", "controller"=>"posts", "action"=>"update", "format"=>"json"}
    
  • JSON 形式ですが、params には含まれません

    test 'passing JSON' do
      patch :update, { key: "value" }.to_json
    end
    
    # Raw Post: "{\"key\":\"value\"}"
    # Params: {"controller"=>"posts", "action"=>"update"}
    
  • JSON 形式ですが、params には含まれません

    test 'passing JSON, setting format' do
      patch :update, { key: "value" }.to_json, format: :json
    end
    
    # Raw Post: "{\"key\":\"value\"}"
    # Params: {"format"=>"json", "controller"=>"posts", "action"=>"update"}
    

このリストはさらに長くなります。私の問題をお見せしたかっただけです。AcceptヘッダーとContent-Typeヘッダーの両方を設定してテストしましたapplication/jsonが、何も役に立たないようです。何か間違ったことをしていますか、それとも Rails の機能テストのバグですか?

4

1 に答える 1