2012-03-22 3 views
1

Michael Hartl의 새로운 Rails Tutorial Book (3.2) 섹션 9.2.1에는 사용자가 로그인하면 다른 사용자에게 변경 사항을 업데이트 (PUT) 할 수 없도록 보장하는 테스트가 정의되어 있습니다. 이 작업을 시도하면 사용자는 홈 페이지로 리디렉션되어야합니다. 웹 페이지가 직접 PUT를 발행 할 수 없기 때문에 RSpec에 시험 사용9 장 인증 테스트가 실패합니다

{풋 user_path (wrong_user)} {response.should의 redirect_to (root_path)}

이 테스트 케이스 및 실패 전에보고 UserController의 첫 번째 before_filter (signed_in_user)가 로그인 페이지로 리디렉션되기 때문에 로그가 끝난 것처럼 보입니다. 여기

이 샘플 응용 프로그램에 대한 내 GitHub의 페이지입니다 : 나는 당신이 당신의 장으로 혼란 한 생각 https://github.com/treetopvt/sample_app

답변

1

8 장에는 쿠키에서 세션으로 전환하는 연습이있었습니다. 내 SessionsHelper 모듈에서 나는 세션으로의 이동이 잘 작동

session[:remember_token] = user.remember_token 

cookies.permanent[:remember_token] = user.remember_token 

교체,하지만 난 더 이상 이었기 때문에 "영구적"쿠키를 저장, 테스트가 실패하지 않습니다. 제 8 장에서 운동 변경 사항을 취소하고 쿠키로 돌아 가면 모든 검사가 끝납니다. 이제 세션을 사용하는 동안 작동하도록 승인 테스트를 변경하는 방법에 대한 아이디어가 있습니까? 이것은 현재 테스트입니다.

  describe "as wrong user" do 
      let(:user) { FactoryGirl.create(:user) } 
      let(:wrong_user) { FactoryGirl.create(:user, email:"[email protected]") } 
      before { sign_in user } 

      describe "Visiting Users#edit page" do 
       before { visit edit_user_path(wrong_user) } 
       it { should have_selector('title', text: full_title('')) } 
      end 

      describe "submitting a PUT request to the Users#update action" do 
       before { put user_path(wrong_user) } #put is an update? 
       specify{ response.should redirect_to(root_path) } 
      end 
     end 
+0

저자는 연습을 한 사람들을 위해이 사례를 언급해야합니다. 정말, 그것을 해결하는 데 몇 시간이 걸렸습니다. 그리고 마침내 나는이 대답에 도달했다. –

0

, 9.2.1에 대한 업데이트 작업을 사용하려는 사용자를 로그 아웃하고 9.2.2 약에 기록됩니다 다른 사용자가 업데이트 작업을 사용하려고하는 사용자 정확한 시나리오를 테스트하고 있는지 확인하려면 사양의 before 블록을 확인해야합니다.

예 : before { sign_in user }은 9.2.2에서 로그인 한 사용자를 설정하는 데 사용되며 다른 사용자의 프로필을 업데이트하려고 할 때 루트 경로로 리디렉션됩니다. 로그인 한 사용자가 전혀없는 것처럼 보이므로 인증 필터가 흐름을 중지하고 로그인 페이지로 리디렉션합니다.

+0

당신이 맞다. 9.2.2가 맞다. 로그인 한 사용자를 기억하지 못하는 것 같다. . 시험 사이에 – Treetopvt

+0

8 장에서 세션에 쿠키에서 전환 할 수있는 운동이 있었다 나의 SessionsHelper 모듈에서 나는 cookies.permanent의 교체.을 : remember_token] = user.remember_token 와 세션 [: remember_token] = user.remember_token 세션 이동은 정상적으로 작동했지만 더 이상 영구적으로 쿠키를 저장하지 않으므로 테스트가 실패합니다. 제 8 장에서 운동 변경 사항을 취소하고 쿠키로 돌아 가면 모든 검사가 끝납니다. – Treetopvt

0

이 부분을 확인하십시오. Stack Overflow comment. 나도 똑같은 문제에 직면했고 sign_in 테스트 도우미에서 그 라인을 교체했다. ("@Aldo 'xoen'Giambelluca"가 언급했다.) 문제는 8 장의 연습 문제를 시도하고 해결했을 때만 문제를 직면하게 될 것이다. 운동을 한 사람들이이 문제에 직면 할 것이라고 언급 한 호앙 팜 (@Hoang Pham)의 말처럼 더 낫다.

관련 문제