Как вы тестируете запрос AJAX с RSpec/RoR?
Я новичок в RoR и недавно начал изучать BDD/Rspec для тестирования моего приложения. Я искал способ специфицировать запрос AJAX, но до сих пор я не нашел много документации по этому поводу.
Кто-нибудь знает, как это сделать? Я использую rails 2.3.8, rspec 1.3.0 и mocha 0.9.8 для своих заглушек (которые я также изучаю...)
Ответы
Ответ 1
Если вы говорите о тестировании его в своих спецификациях контроллера, где обычно звоните
get :index
чтобы сделать HTTP-запрос к действию индекса, вместо этого вы должны позвонить
xhr :get, :index
чтобы выполнить запрос XmlHttpRequest (AJAX) к действию индекса с помощью GET.
Ответ 2
Рельсы 5/6
Начиная с Rails 5.0 (с RSpec 3.X), попробуйте установить xhr: true
так:
get :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
Ответ 3
Синтаксис немного изменился для Rails 5 и rspec> 3.1 (я считаю)
для запросов POST:
post :create, xhr: true, params: { polls: { question: 'some' } }
Теперь вам нужно точно установить params
для запросов GET:
get :action, xhr: true, params: { id: 10 }
для рельсов 4 и rspec <= 3.1
xhr post :create, { polls: { question: 'some' } }
ПОЛУЧИТЬ запросы:
xhr get :show, id: 10