Подтвердить что ты не робот

Как вы тестируете запрос AJAX с RSpec/RoR?

Я новичок в RoR и недавно начал изучать BDD/Rspec для тестирования моего приложения. Я искал способ специфицировать запрос AJAX, но до сих пор я не нашел много документации по этому поводу.

Кто-нибудь знает, как это сделать? Я использую rails 2.3.8, rspec 1.3.0 и mocha 0.9.8 для своих заглушек (которые я также изучаю...)

4b9b3361

Ответ 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