2012-09-29 1 views
1

저는 Ruby on Rails에서 Capybara를 사용하여 모든 필드를 채우고 양식을 제출하는 통합 테스트를 작성합니다. 이렇게하면 새 페이지가 브라우저에로드됩니다. 테스트에서 두 번째 페이지에 대한 응답을받을 수 있습니까? 카피 바라가 정보를 제공하지 않기 때문에Capybara로 여러 페이지의 페이지 응답을 확인하십시오.

describe "the signup process", :type => :request do 
    it "signs me in" do 
     visit sign_up_path 
     fill_in 'user_first_name', :with => "Jhonny" 
     t1 = Time.new 
     fill_in 'user_email', :with => "[email protected]" 
     fill_in 'user_last_name', :with => "Bravo" 
     fill_in 'user_zip_code', :with => "94102" 
     fill_in 'user_password', :with => "password1234" 

     click_button 'user-button' 
     response.should be_success 
     response.body should_contain("Text on next page") 
    end 
end 
+0

'방문 '이 응답을 반환하지 않으면,'get'을 사용해야합니다. 참조 : http://stackoverflow.com/questions/11090038/rspec-and-capybara-difference-between-visit-and-get-methods-with-regards-to-th이 경우에도, 더 많이 탐색하고 있으므로 한 페이지 이상이면'get'가 작동하지 않습니다. –

답변

1

당신은, 카피 바라의 visit 당신이 응답 상태에 액세스 할 수 없습니다 사용하는 경우. 응답 상태를 분석하려면 일반 HTTP 요청 동사 (예 : get, post 등)를 사용해야하지만 테스트에 여러 페이지가 포함되어 있기 때문에 설명하는 경우에는 작동하지 않습니다.

은 (getvisit의 사용은 혼란의 공통점입니다 자세한 내용은 호세 Valim에 의해 this post를 참조하십시오.).

그래서 기본적으로 대답은 : 당신의 통합 테스트의 응답 상태를 테스트하지 않습니다.

하지만 어쨌든이 작업을 수행해서는 안됩니다. 통합 테스트는 사용자가 실제로 본 내용, 즉 브라우저에 표시되는 내용을 테스트합니다. 응답 상태를 "확인"하지 않고 실제 페이지와 그 안에있는 내용을 볼 수 있으므로 실제로 테스트해야합니다. 위의 테스트에서, 그 라인은 response.body should_contain("Text on next page")입니다. 응답이 성공적 이었음을 보증하기에 충분합니다.

독점적으로 API와 유사한 응용 프로그램의 측면을 테스트하려는 경우 rspec 요청 사양을 사용하는 것이 좋습니다 (본질적으로 통합 테스트이지만 한 단계 요청/응답에 초점을 맞 춥니 다). get 요청을 사용하고 capybara matchers를 사용하여 응답을 분석하십시오.

관련 문제