How to send raw post data in a Rails functional test?

后端 未结 12 1611
感情败类
感情败类 2020-12-13 12:07

I\'m looking to send raw post data (e.g. unparamaterized JSON) to one of my controllers for testing:

class LegacyOrderUpdateControllerTest < ActionControl         


        
12条回答
  •  春和景丽
    2020-12-13 13:02

    I ran across the same issue today and found a solution.

    In your test_helper.rb define the following method inside of ActiveSupport::TestCase:

    def raw_post(action, params, body)
      @request.env['RAW_POST_DATA'] = body
      response = post(action, params)
      @request.env.delete('RAW_POST_DATA')
      response
    end
    

    In your functional test, use it just like the post method but pass the raw post body as the third argument.

    class LegacyOrderUpdateControllerTest < ActionController::TestCase
      test "sending json" do
        raw_post :index, {}, {:foo => "bar", :bool => true}.to_json
      end
    end
    

    I tested this on Rails 2.3.4 when reading the raw post body using

    request.raw_post
    

    instead of

    request.body.read
    

    If you look at the source code you'll see that raw_post just wraps request.body.read with a check for this RAW_POST_DATA in the request env hash.

提交回复
热议问题