program tip

RSpec / RoR로 AJAX 요청을 어떻게 테스트합니까?

radiobox 2021. 1. 10. 17:04
반응형

RSpec / RoR로 AJAX 요청을 어떻게 테스트합니까?


저는 RoR을 처음 접했고 최근에 애플리케이션 테스트를 위해 BDD / Rspec을 배우기 시작했습니다. AJAX 요청을 지정하는 방법을 찾고 있었지만 지금까지 이것에 대한 문서를 많이 찾지 못했습니다.

누구든지 이것을하는 방법을 알고 있습니까? 내 스텁에 rails 2.3.8, rspec 1.3.0 및 mocha 0.9.8을 사용하고 있습니다 (저도 배우는 중입니다 ...)


일반적으로 호출하는 컨트롤러 사양 내에서 테스트하는 것에 대해 이야기하는 경우

get :index

인덱스 작업에 대한 HTTP 요청을 만들려면 대신

xhr :get, :index

GET을 사용하여 인덱스 작업에 대한 XmlHttpRequest (AJAX) 요청을 만듭니다.


레일 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

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' } }

GET 요청 :

xhr get :show, id: 10

참조 URL : https://stackoverflow.com/questions/3971268/how-do-you-test-an-ajax-request-with-rspec-ror

반응형