2011-02-23 6 views
4

레일즈 3에서 서명 된 쿠키를 사용하여 응용 프로그램에서 "remember-me"기능을 사용하고 있습니다. cookies['remember_id']을 비교하면 암호화 된 쿠키가 제공되고 cookies.signed은 정의되지 않았기 때문에 쿠키를 기능적으로 테스트 할 수 없다는 것을 제외하고는 모두 작동합니다.레일에서 서명 된 쿠키 테스트

실마리가 있습니까?

답변

6

문제는 적어도 기능적 테스트 (ActionController :: TestCase)의 컨텍스트에서 "쿠키"개체는 해시 인 반면 컨트롤러로 작업 할 때는 ActionDispatch : : Cookies :: CookieJar 객체입니다. 그래서 우리는 이것을 "signed"메소드를 사용하여 SignedCookieJar로 변환 할 수 있도록이를 CookieJar 객체로 변환해야합니다.

당신은

@request.cookies.merge!(cookies) 
cookies = ActionDispatch::Cookies::CookieJar.build(@request) 
+0

놀라워요! 그것은 트릭을했다. 고맙습니다! – Ian

+0

나는이 같은 문제에 직면했다. 그래서 고마워! 같은 테스트에서 새/두 번째 요청이 만들어져 새로운 쿠키가 생성되는 경우이 두 줄을 여러 번 포함해야하는지 궁금합니다. 쿠키를 매개 변수로 사용하여 테스트 도우미로 변환 할 수 있습니까? – Nick

+0

Rails 5에서는'merge!'메소드가 사용되지 않습니다. Rails 5에서 올바른 코드는 무엇입니까? (만약 내가 '병합'이 여전히 유효하다고 오해하지 않는다면) – Marty

-2

assert_equal의 @의 controller.send CookieJar 객체에 해시에서 쿠키를 변환 (GET 요청 후) 귀하의 기능 테스트로 다음을 넣을 수 있습니다 (: 쿠키) .signed [: remember_id ], matching_value

0

이것은 약간 주제와는 거리가 있지만 ActionDispatch :: Cookies :: CookieJar.build가 변경 되었기 때문에 Rails 3 솔루션이 Rails 5에서 작동하는 데 문제가있었습니다. 이것은 트릭을했습니다 :

jar = ActionDispatch::Cookies::CookieJar.build(@request, cookies.to_hash) 
assert_equal jar.signed['remember_token'], ... 
+0

귀하의 의견에 진심으로 감사드립니다. 그러나 "약간 주제가"있는 답변을 게시하면 대답을 게시하는 대신 질문에 대한 의견을 표명 할 수 있습니다. :) – benhorgen

+1

나는 원했지만 다른 사람의 질문이나 대답에 대해 논평하려면 50을 넘어야한다. 나는 그것이 나의 첫번째 지점 인 것에 따라 나는하지 않는다 :) – Bill

+0

좋은 통화 계산서. 그 통찰력에 감사드립니다. – benhorgen

관련 문제