LoginSignup
8
8

More than 5 years have passed since last update.

Capybara+RSpecでCookieの設定と読み込みでハマっていたので自分用のメモ

Posted at

Capybara+RSpecでCookieの設定と読み込みをサクっと書こう・・と思って、数日ハマっていて

  • 公式サイト
  • capybara、rspec、cookie、page、browser、というキーワードに引っかかりそうな英語のページ
  • Qiitaのcapybaraタグの情報

を見ても一向に解決策が見つからず途方にくれていたのですが、何が原因でハマったのかわかったので自分用にメモ

環境

  • Mac OS X 10.8.5
  • Ruby 2.2.0
    • rbenv利用してインストールしてます
  • rails 4.2.0
  • rspec 3.1.0

Capybaraのことを実はよくわかってなかった

ついさっき見たCapybaraを使う際に知っておきたいこと。これが突破口になりました。

3種類のDriverがあるっていうことを全く意識しておらず、ググって見つかった情報は、CapybaraのどのDriverを利用したケースのものだったのかを認識してませんでした(^_^;)

そのため、binding.pryで、Cookieの値を確認しようと思って

[1] pry(#<RSpec::Core::Example>)> page.driver.browser.cookies
NoMethodError: undefined method `cookies' for #<Capybara::RackTest::Browser:0x007fc4e7623a78>
from (pry):2:in `block in run'

みたいなことをしても原因わからない時は何故なのかちっとも理解できませんでした

上記エラーメッセージをじっくり見てどのDriver利用してるかわかった。

エラーメッセージでNoMethodError: undefined method `cookies' for Capybara::RackTest::Browser:0x007fc4e7623a78みたいな感じで表示されてますが自分はデフォルトのCapybara::RackTestを使ってることがわかりました。

一方で、binding.pryした時にやったpage.driver.browser.cookiesみたいなやつは、capybara-webkitを使ってる場合の書き方でした。

RSPecでCookieの設定と読み込みの書き方

Cookieの読み込み方法は英語のページですがこちらを参考にしました。(設定で参考にしたページを忘れてしまいました。。。)

ひとまず設定&読み込みのサンプルを簡単に以下に示しておきます

spec/spec_helper

# 途中省略
include Capybara::DSL

spec/factories/restaurants.rb

FactoryGirl.define do
  factory :restaurant do
    sequence(:tabelog_url) { |n| "restaurant_tabelog_url#{n}" }
    sequence(:name) { |n|  "restaurant_name#{n}" }
  end
end

spec/controllers/restaurants_controller_spec.rb

describe RestaurantsController do
  let(:restaurant) { create :restaurant }

  describe 'visit restaurants' do
    it 'クッキーを確認できる' do
      visit '/restaurants/1'
      page.driver.browser.set_cookie("user=user1;expires=#{(Time.now+86400).strftime("%a, %d %b %Y %H:%M:%S GMT")}; ")
      cookie_value = page.driver.browser.rack_mock_session.cookie_jar['user']
      expect(cookie_value).to eq 'user1'
    end
  end
end

教訓

利用する技術の概念を正確に掴まないうちに適当にググるのは良くないですね

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8