레일즈 3에서 서명 된 쿠키를 사용하여 응용 프로그램에서 "remember-me"기능을 사용하고 있습니다. cookies['remember_id']
을 비교하면 암호화 된 쿠키가 제공되고 cookies.signed
은 정의되지 않았기 때문에 쿠키를 기능적으로 테스트 할 수 없다는 것을 제외하고는 모두 작동합니다.레일에서 서명 된 쿠키 테스트
실마리가 있습니까?
레일즈 3에서 서명 된 쿠키를 사용하여 응용 프로그램에서 "remember-me"기능을 사용하고 있습니다. cookies['remember_id']
을 비교하면 암호화 된 쿠키가 제공되고 cookies.signed
은 정의되지 않았기 때문에 쿠키를 기능적으로 테스트 할 수 없다는 것을 제외하고는 모두 작동합니다.레일에서 서명 된 쿠키 테스트
실마리가 있습니까?
문제는 적어도 기능적 테스트 (ActionController :: TestCase)의 컨텍스트에서 "쿠키"개체는 해시 인 반면 컨트롤러로 작업 할 때는 ActionDispatch : : Cookies :: CookieJar 객체입니다. 그래서 우리는 이것을 "signed"메소드를 사용하여 SignedCookieJar로 변환 할 수 있도록이를 CookieJar 객체로 변환해야합니다.
당신은
@request.cookies.merge!(cookies)
cookies = ActionDispatch::Cookies::CookieJar.build(@request)
assert_equal의 @의 controller.send CookieJar 객체에 해시에서 쿠키를 변환 (GET 요청 후) 귀하의 기능 테스트로 다음을 넣을 수 있습니다 (: 쿠키) .signed [: remember_id ], matching_value
이것은 약간 주제와는 거리가 있지만 ActionDispatch :: Cookies :: CookieJar.build가 변경 되었기 때문에 Rails 3 솔루션이 Rails 5에서 작동하는 데 문제가있었습니다. 이것은 트릭을했습니다 :
jar = ActionDispatch::Cookies::CookieJar.build(@request, cookies.to_hash)
assert_equal jar.signed['remember_token'], ...
놀라워요! 그것은 트릭을했다. 고맙습니다! – Ian
나는이 같은 문제에 직면했다. 그래서 고마워! 같은 테스트에서 새/두 번째 요청이 만들어져 새로운 쿠키가 생성되는 경우이 두 줄을 여러 번 포함해야하는지 궁금합니다. 쿠키를 매개 변수로 사용하여 테스트 도우미로 변환 할 수 있습니까? – Nick
Rails 5에서는'merge!'메소드가 사용되지 않습니다. Rails 5에서 올바른 코드는 무엇입니까? (만약 내가 '병합'이 여전히 유효하다고 오해하지 않는다면) – Marty