Rails Testing XHR с данными Post
Я просто окунаю пальцы ног в Ruby и Rails и пытаюсь раздобыть всю вещь BDD. У меня есть страница, которая возвращает AJAX POST к контроллеру, который имеет метод под названием "сортировка" и проходит по массиву id, подобному этому
["song-section-5", "song-section-4", "song-section-6"]
Я хочу написать тест для этого, поэтому я придумал что-то вроде этого:
test "should sort items" do
xhr :post, :sort
end
Но не могу понять, как пройти по массиву. Любая помощь?
Ответы
Ответ 1
Из Rails исходный код
def xml_http_request(request_method, action, parameters = nil, session = nil, flash = nil)
Третий вход для метода - "параметры". Это параметры, отправленные на ваш контроллер.
xhr :post, :sort, { :ids => ["song-section-5", "song-section-4", "song-section-6"] }
Ответ 2
Для меня, используя RSpec 3.6 и Rails 5.1, предыдущий ответ завершается с ошибкой:
xhr :post, :index
# => NoMethodError: undefined method `xhr' for #<RSpec::ExampleGroups::XController::Index::AJAXRequest:0x007fd9eaa73778>
Rails 5.0 +
Вместо этого попробуйте установить xhr: true
следующим образом:
post :index, xhr: true
Фон
Вот соответствующий код в ActionController:: TestCase. Установка флага xhr
заканчивается добавлением следующих заголовков:
if xhr
@request.set_header "HTTP_X_REQUESTED_WITH", "XMLHttpRequest"
@request.fetch_header("HTTP_ACCEPT") do |k|
@request.set_header k, [Mime[:js], Mime[:html], Mime[:xml], "text/xml", "*/*"].join(", ")
end
end