Я смог POST необработанные данные с помощью Rails 5.1.4, установив их непосредственно в запросе для спецификации контроллера
@request.env['RAW_POST_DATA'] = '<test>some raw xml</test>'
post :show
В контроллере это можно прочитать через request.body.read
> request.body.read
=> "<test>some raw xml</test>"
Обратите внимание, что это не будет работать при переходе на Rails 5.2.В этом случае тело запроса будет пустым, поскольку основное поведение изменилось.Лучший способ проверить этот сценарий - использовать спецификации запросов вместо спецификаций контроллера.
спецификации контроллера - спецификация контроллера представляет собой оболочку RSpec для функционального теста Rails.Он позволяет вам моделировать один http-запрос в каждом примере, а затем указывать ожидаемые результаты
Спецификации запроса - Спецификации запроса обеспечивают тонкую оболочку для интеграционных тестов Rails и предназначены для управления поведением через полный стек,включая маршрутизацию (предоставляемую Rails) и без заглушки (это зависит от вас).
Вот пример отправки этих же данных через спецификацию запроса:
post items_path, env: {'RAW_POST_DATA' => "<test>some raw xml</test>"}
В контроллере
> request.body.read
=> "<test>some raw xml</test>"