rails:3963
From: dezawa <dezawa@a...>
Date: Thu, 09 Jan 2014 19:51:01 +0900
Subject: [rails:3963] Re: Capybara (2.2.0)でcookie情報を得たい
自己 偽解決 しました。 cookieを読むのはまだできないのですが、session情報を cookieから ARに変え ることでテストが通るようになりました。 暗号化してあるのか、と config を色々調べたのですが今のところらしき設定は 見つからず、 cookie を読むのは依然だめです。 sessyon情報が保存できて次に読めていればよいので、とりあえず cookieのこと はおいておきます。 (2014年01月08日 16:23), dezawa wrote: > 出沢@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/ > -- 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... ]