我在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