2011年10月4日火曜日

rails3.1 with rspec-request , capybaraでcookieを取り扱うには

rails3.1とrspec-requestsをcapybaraで利用した際に、cookieの扱い方が分からなかったのでメモしておきます。
# app/controllers/foo_controller.rb
class FooController < ApplicationController
  def index
    puts cookies["key1"]
    cookies["key1"] = '2'
    cookies.permanent["key2"] = "3"
  end
end

# spec/requests/foo_spec.rb
describe "foo周辺の仕様" do
  def cookies
    Capybara.current_session.driver.browser.current_session.instance_variable_get(:@rack_mock_session).cookie_jar
  end

  it "foo/index" do
    cookies["key1"] = '1'
    visit "/foo/index"
    cookies["key1"].should == '2'
    cookies["key2"].should == '3'
  end
end
上記の検証の過程で、
  • cookiesのキー名は文字列でないといけない(シンボルだと上手くいかない)
  • cookiesメソッドを上書く必要があり
  • permanentでも同じように読める("key2")
という事が判明しました。

ちなみに各プロダクトは下記の組み合わせで確認しました。
rails-3.1.0
rspec-2.6.0
rspec-rails-2.6.1
capybara-1.0.1

0 件のコメント:

コメントを投稿