2011-09-12 3 views
7

Rails 통합 테스트에서 세션 변수 (필자의 경우 : user_id)를 어떻게 설정합니까?Rails 통합 테스트에서 세션 변수를 설정하는 방법

분명히 완전한 통합 테스트가 아니지만, 수동 사용자 상호 작용 없이는 내 앱 사용자 인증이 수행 될 수 없다는 점을 감안하면 어떻게 든 해결하고 수동으로 세션 변수를 설정할 수 있습니까?

다음을 시도했습니다. "session"은 해당 범위에서 사용할 수 없으며 open_session은 업데이트 방법을 찾지 못한 세션을 반환합니다.

답변

1

왜 수동으로 상호 작용하지 않고 인증을 수행 할 수 없습니까? 보안 문자를 사용합니까? 그렇다면 테스트 환경에서 실행하기 위해 부분적으로 스텁을 작성하십시오.

+0

트위터 또는 페이스 북과 상충됩니다. – jbasko

+0

도움이 되셨습니까? http://stackoverflow.com/questions/5331045/testing-a-web-applications-facebook-integration-with-cucumber –

5

내가 알 수있는 한, 당신은 할 수 없습니다. 통합 테스트의 세션 값 (rails 3.2.2)은 사본입니다. (Rails gods : 내가 인 경우 수정하십시오.) 값을 설정할 수는 있지만 실제 세션의 로컬 복사본이기 때문에 다음 get/post 에 영향을 미치지 않습니다. assert 테스트에 적합합니다. 통합 테스트 중에 세션 상태를 유지하는 데 그리 좋지 않습니다.

에버그린을 통한 자바 스크립트 테스트를 지원하는 테스트 컨트롤러가 있습니다.

내 솔루션은 내 테스트 컨트롤러에 방법을 추가하는 것이고, 프로덕션 환경에서는 경로를 사용할 수 있기 때문에 세션 값을 설정할 수 있습니다.

기본적으로 내 app_test # set_session 메서드는 접두사에 대해 매개 변수 이름을 차단합니다. 접두사가 발견되면 접두사가 제거 된 매개 변수 이름 에 대한 세션 값이 설정됩니다. 뭔가 같이 : "세션으로

prefix = "set_session_" 
    post("/set_session.html", { (prefix + "user_id") => "My Name Is Mudd" }) 

로 꽤되지 않음 : 그래서

params.each() do |key, value| 
      next if (key !~ /^set_session_/) 
      session[ key.slice(("set_session_".size())..-1).to_sym ] = value 
    end 
    # don't forget to render something/anything 

, 내 통합 테스트 동안 세션 변수를 설정, 내가 좋아하는 코드의 작은 덩어리가 [을 : USER_ID] = ' My Name은 Mudd입니다. ""하지만 작동합니다. 내 다음 게시물/get에 원하는 값으로 설정된 세션 [: user_id]이 표시됩니다.

이것은 쉽게 정수, 기호 등을 전달할 수 있도록 확장되었으며 물론 여러 세션 키/값 쌍을 한 번에 설정할 수 있습니다. 예쁘지는 않지만 나쁘지 않습니다.

관련 문제