Как публиковать данные JSON в функциональном тесте rails 3

Я планирую использовать данные JSON как в запросе, так и в ответе в моем проекте, и у меня возникнут некоторые проблемы при тестировании.

Некоторое время поискав, я нашел следующий код, который использует curl для публикации данных JSON:

curl -H "Content-Type:application/json" -H "Accept:application/json" \
    -d '{ "foo" : "bar" }' localhost:3000/api/new

В контроллере я могу получить доступ к данным JSON, просто используя params [: foo] что действительно легко. Но для функционального тестирования я нахожу только сообщение и xhr (псевдоним для xml_http_request ).

Как я могу написать функциональный тест в рельсах, чтобы добиться того же эффект как при использовании curl ? Или мне следует провести тестирование другими способами?

Вот что я пробовал. Я нашел реализацию для xhr в action_controller / test_case. rb и попытался добавить метод jhr , просто изменив «Conetent-Type» и «HTTP_ACCEPT». (Добавлен в test / test_helpers.rb .)

def json_http_request(request_method, action, parameters = nil, session = nil, flash = nil)
  @request.env['Content-Type'] = 'Application/json'
  @request.env['HTTP_ACCEPT'] ||= [Mime::JSON, Mime::JS, Mime::HTML, Mime::XML, 'text/xml', Mime::ALL].join(', ')
  __send__(request_method, action, parameters, session, flash).tap do
    @request.env.delete 'Content-Type'
    @request.env.delete 'HTTP_ACCEPT'
  end
end
alias jhr :json_http_request

Я использовал его так же, как xhr , но он не работает. Я проверил объект @response и увидел, что тело "" .

Я также нахожу один похожий вопрос в Stack Overflow, но он для направляющих 2 и ответ на отправку сырых данных не работает в рельсах 3.

15
задан Community 23 May 2017 в 12:02
поделиться