rails:3960
From: dezawa <dezawa@a...>
Date: Wed, 08 Jan 2014 16:23:09 +0900
Subject: [rails:3960] Capybara (2.2.0)でcookie情報を得たい
出沢@Rails2/Test から Rails4/Devise/RSpec/Capybara/Poltergeist に移行し ています。 Development環境でブラウザで試すと期待通り動くのに、テストが通らない現象 に出会いました。 logを見るとCapybaraテスト環境でcookieがうまく機能していないようです。 cookieの内容を確認しようと思ったのですが得ることができませんでした。 1. cookieの内容を取得する方法 2. cookieがうまく設定されていないとしたら、テスト環境で設定する方法 をご指導ください。 環境は Ubuntu 13.10(VMplayer) ruby 1.9.3 rails (4.0.1) rspec (2.14.1) capybara (2.2.0) poltergeist (1.5.0) devise (3.2.2) です ### のたうった記録 単純に cookies[:BK_year].should == Time.local(2014,1,1) ですと NameError: undefined local variable or method `cookies' for #<RSpec::Core::ExampleGroup::Nested_5:0xacd7f6c> となります。 Googleで capybara cookie を検索すると色々でてきましたがどれでもうまく行 きませんでした。 一番迫ったのが kennyjさんのブログ http://kennyj-jp.blogspot.jp/2011/10/rails31-with-rspec-request.html を参考に、 def cookies Capybara.current_session.driver. browser.current_session. instance_variable_get(:@rack_mock_session).cookie_jar end を定義したときです。 が、この時も cookies[:BK_year]は nil でした。 この時 cookiesは以下の様になっています。 +#<Rack::Test::CookieJar:0xc340880 + @cookies= + [#<Rack::Test::Cookie:0xc6e669c + @default_host="www.example.com", + @name="_msdn_session", + @name_value_raw= + "_msdn_session=NzhONXh2eWZBYjgy。。。。9faacd6f03a581", + @options={"path"=>"/", "HttpOnly"=>nil, "domain"=>"www.example.com"}, + @value= + "_msdn_session=NzhONXh2eWZBYjgy。。。。9faacd6f03a581", + #<Rack::Test::Cookie:0xc0cfee8 + @default_host="www.example.com", + @name="request_method", + @name_value_raw="request_method=GET", + @options={"path"=>"/", "domain"=>"www.example.com"}, + @value="GET">], + @default_host="www.example.com"> 「CookieJarのlocal変数cookiesに配列要素として Cookie がある。」 様に見えます。 rack-test-0.6.2/lib/rack/test/cookie_jar.rb によれば以下の様になっている ので、 def [](name) cookies = hash_for(nil) # TODO: Should be case insensitive cookies[name] && cookies[name].value end def hash_for(uri = nil) cookies = {} @cookies.each do |cookie| cookies[cookie.name] = cookie if !uri || cookie.matches?(uri) end return cookies end cookies["_msdn_session"]を呼んでみますと "OWc0ZWFXMnA3。。。59116062" が得られます。(@valueの値とは異なっている) Marshalされているのか、と http://stackoverflow.com/questions/9224001/capybara-cucumber-getting-cookies を参考に Marshal.load(Base64.decode64(cookies["_msdn_session"])) としてみますと TypeError: incompatible marshal file format (can't be read) format version 4.8 required; 72.110 given と言う所で力尽きています。 -- ML: rails@r... 使い方: http://QuickML.com/
-> 3960 2014-01-08 08:23 [dezawa@a... ] Capybara (2.2.0)でcookie情報を得たい 3961 2014-01-09 10:53 ┣[zn@m... ] 3962 2014-01-09 11:45 ┃┗[dezawa@a... ] 3964 2014-01-09 14:15 ┃ ┗[zn@m... ] 3965 2014-01-09 15:15 ┃ ┗[dezawa@a... ] 3963 2014-01-09 11:51 ┗[dezawa@a... ]