我在Rails 3中使用签名的cookie来启用应用程序中的“记住我”功能。一切正常,除非我无法对cookies进行功能测试,因为比较cookies['remember_id']
会给我加密的cookie,并且cookies.signed
未定义。在rails中测试签名的cookie
任何线索?
我在Rails 3中使用签名的cookie来启用应用程序中的“记住我”功能。一切正常,除非我无法对cookies进行功能测试,因为比较cookies['remember_id']
会给我加密的cookie,并且cookies.signed
未定义。在rails中测试签名的cookie
任何线索?
问题(至少在表面上)是在功能测试(ActionController :: TestCase)的上下文中,“cookies”对象是哈希,而当您使用控制器时,它是一个ActionDispatch: :Cookie :: CookieJar对象。所以我们需要将它转换为CookieJar对象,以便我们可以使用它上面的“signed”方法将它转换为SignedCookieJar。
你可以把下面的内容功能测试(GET请求后),以饼干从哈希转换为CookieJar对象
@request.cookies.merge!(cookies)
cookies = ActionDispatch::Cookies::CookieJar.build(@request)
assert_equal @ controller.send(:饼干).signed [:remember_id ],matching_value
这有些偏离主题,但是我无法使Rails 3解决方案在Rails 5中工作,因为ActionDispatch :: Cookies :: CookieJar.build已更改。这样做的诀窍:
jar = ActionDispatch::Cookies::CookieJar.build(@request, cookies.to_hash)
assert_equal jar.signed['remember_token'], ...
令人惊叹!那就是诀窍。谢谢! – Ian 2011-03-04 02:43:19
我遇到了同样的问题,谢谢!我想知道是否有必要多次包含这两行,如果在同一个测试中发出了新的/秒的请求,从而产生新的cookie?是否有可能把它变成一个测试助手(以cookies作为参数)? – Nick 2016-01-23 17:00:05
“合并!”方法在Rails 5中已弃用。Rails 5中的正确代码是什么? (如果我没有错误'合并'仍然可用) – Marty 2016-07-06 16:22:58