Функциональные тесты API Rails с телом XML

Я написал функциональные тесты для конечных точек API, встроенных в Rails, используя среду тестирования shoulda.

Пример выглядит следующим образом:

  setup do
    authenticated_xml_request('xml-file-name')
    post :new
  end

  should respond_with :success

authenticated_xml_request – это вспомогательный метод тестирования, который устанавливает @request.env['RAW_POST_DATA'] с содержимым XML.

После обновления приложения с rails 2.3.3 до rails 2.3.8 функциональные тесты не проходят, поскольку полученный XML-контент не объединяется с хэшем params.

Я устанавливаю запрос с правильным типом mime через @request.accept = "text/xml"

Я могу проверить содержимое запроса, используя request.raw_post, но я хотел бы сохранить текущую настройку.

Кроме того, при запуске теста из терминала с использованием cURL или любой другой библиотеки (rest_http) в режиме разработки API работает отлично.

Любые советы или помощь очень ценятся.


person cnikolaou    schedule 18.05.2011    source источник
comment
возможно, аналогичная проблема описана здесь stackoverflow.com/questions/5474303 /   -  person Fivell    schedule 02.06.2011
comment
Да, я пробовал это, но продолжал понимать, что @request.env['action_dispatch.request.parameters'] это nil   -  person cnikolaou    schedule 03.06.2011


Ответы (2)


Теперь проще:

post "/api/v1/users.xml", user.to_xml, "CONTENT_TYPE" => 'application/xml'

Обратите внимание, что вы должны указать соответствующий «CONTENT_TYPE». В противном случае ваш запрос будет выглядеть как «application/x-www-form-urlencoded», и xml не будет правильно проанализирован.

person Grimmo    schedule 28.10.2011

Я решил проблему, добавив собственный патч в rails (файл test_process.rb), чтобы преобразовать входящий xml в хеш, а затем объединить с хэшем параметров.

в строке 439:

parameters ||= {}

parameters.merge!(Hash.from_xml(@request.env['RAW_POST_DATA'])) if @request.env['RAW_POST_DATA'] && @request.env['CONTENT_TYPE']=='application/xml'

person cnikolaou    schedule 06.06.2011