Я планирую использовать данные JSON как в запросе, так и в ответе в моем проекте, и у меня возникли некоторые проблемы при тестировании.
После поиска я нахожу следующий код, который использует curl
для публикации данных JSON:
curl -H "Content-Type:application/json" -H "Accept:application/json" \
-d '{ "foo" : "bar" }' localhost:3000/api/new
В контроллере я могу получить доступ к данным JSON, просто используя params[:foo]
, что действительно просто.Но для функционального тестирования я нахожу только post
и 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
и обнаружил, что тело " "
.
Я также нахожу один похожий вопрос о переполнении стека, но он предназначен для рельсов 2, а ответ для публикации необработанных данныхне работает в рельсах 3.