Сегодня я столкнулся с той же проблемой и нашел решение.
В вашем test_helper.rb
определите следующий метод внутри 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
В вашем функциональном тесте используйте его так же, как метод post
, но передайте необработанное тело сообщения в качестве третьего аргумента.
class LegacyOrderUpdateControllerTest < ActionController::TestCase
test "sending json" do
raw_post :index, {}, {:foo => "bar", :bool => true}.to_json
end
end
Я проверял это на Rails 2.3.4 при чтении исходного сообщения, используя
request.raw_post
вместо
request.body.read
Если вы посмотрите на исходный код , вы увидите, что raw_post
просто переносит request.body.read
с проверкой этого RAW_POST_DATA
в хэше request
env.