2012-01-04 2 views
8

통합 테스트에 rspec 및 capybara를 사용하고 있습니다.rspec 통합 테스트의 세션 객체

요청 사양으로 세션 개체를 만드는 방법은 무엇입니까?

나는 세션 객체를 사용하여 값을 검사하여 선택적인 내용을 표시하는보기 페이지가 있습니다.

문제는 요청 사양에서 세션 개체를 만들 수 없다는 것입니다. 다음은 뷰의 예입니다

<% if session[:role] == "Role" %> 
---content--- 
<% else %> 
--content-- 
<% end %> 

그리고 내 요구 사양

session[:role] = "Role" 
visit my_path 

내부 그러나 그것은 나에게 오류 발생 "전무에 대한 정의되지 않은 메서드`세션을 'NilClass".

나는 또한 capybara.But의 세션 개체를 만들려고했지만 아무것도 찾을 수 없습니다.

이 문제를 해결할 수있는 방법이 있습니까? 나는 이것과 관련된 것을 찾을 수 없습니다. 그것은 불가능한 것 같습니다. 약간의 도움은 정말로 감사합니다.

+0

if 조건에서 = 대신 ==를 사용했을 가능성이 높습니다. –

+0

예. 죄송합니다. 의미는 여기에 있습니다. –

답변

3

요청 사양을 수행하는 방법은 세션 변수를 설정하기 위해 사용자가 일반적으로 방문해야하는 URL을 방문하는 것입니다.

나는 세션 쿠키를 직접 설정하는 것 외에는 다른 방법을 모른다. Capybara.current_session.driver.browser.set_cookie이 작업을 수행하되 손으로 쿠키 값을 만들어야합니다.

+0

나는 이것을 시도했다 : cookies [: role] = "코칭", Capybara.current_session.driver.browser.set_cookie (cookies [: role]) ,,하지만 작동하지 않습니다. mi 잘못하고있는거야? –

+1

세션을 설정하지 않습니다. 레일스가 세션 쿠키를 생성하는 방법을 재현하고 set_cookie 호출에서 그 결과를 사용해야합니다. 당신은 분명히 여기있는 길을 벗어났습니다 - 일반적인 접근 방식은 단지 세션을 설정하는 페이지를 방문하는 것입니다. –

+0

제 경우에는이 세션을 응용 프로그램 컨트롤러의 개인 메소드에 설정합니다. –

관련 문제