Rails Testing XHR с почтовыми данными - PullRequest
11 голосов
/ 18 июня 2011

Я просто погружаю свои пальцы в Ruby и Rails и пытаюсь разобраться с BDD.У меня есть страница, которая выполняет AJAX POST обратно в контроллер, который имеет метод с именем «sort» и передает массив идентификаторов, как это

["song-section-5", "song-section-4", "song-section-6"]

Я хочу написать тест для этого, поэтому я пришелс примерно таким:

test "should sort items" do
  xhr :post, :sort
end

Но не могу понять, как пройти по массиву.Любая помощь?

Ответы [ 2 ]

17 голосов
/ 18 июня 2011

Из 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"] }
12 голосов
/ 21 июня 2017

Для меня, используя RSpec 3.6 и Rails 5.1, предыдущий ответ терпит неудачу:

xhr :post, :index

# => NoMethodError: undefined method `xhr' for #<RSpec::ExampleGroups::XController::Index::AJAXRequest:0x007fd9eaa73778>

Рельсы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...