Как вы тестируете AJAX-запрос с RSpec / RoR? - PullRequest
53 голосов
/ 19 октября 2010

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

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

Ответы [ 3 ]

106 голосов
/ 19 октября 2010

Если вы говорите о тестировании в спецификациях вашего контроллера, где вы обычно вызываете

get :index

, чтобы сделать HTTP-запрос к действию index, вместо этого вы должны вызвать

xhr :get, :index

чтобы сделать запрос XmlHttpRequest (AJAX) к действию индекса с помощью GET.

27 голосов
/ 21 июня 2017

Рельсы 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
4 голосов
/ 16 февраля 2018

Синтаксис немного изменился для 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 </p>

xhr post :create, { polls: { question: 'some' } }

GET-запросы:

xhr get :show, id: 10
...