読者です 読者をやめる 読者になる 読者になる

リア充爆発日記

You don't even know what ria-ju really is.

Rails3+RSpec+Capybaraでログイン中のテストをする方法

ログインしなきゃいけない画面だったり、同じ画面でも、ログインしているのとしていないのでは挙動が違う画面はたくさんあって、そういうときのテストはどうやったらいいんだろうという疑問が発生した件について。

答えはここに。
http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users?version=3.2#sec:requiring_signed_in_users

けっきょく、testのためのヘルパーを書くのが正解のよう。
spec/support/utilities.rb

def sign_in(user)
  visit signin_path
  fill_in "Email",    with: user.email
  fill_in "Password", with: user.password
  click_button "Sign in"
  cookies[:remember_token] = user.remember_token
end

ポイントは cookies.permanentがtestの中では使えないから使ってないってところだと思う。

実際の利用にあたっては
spec/requests/user_pages_spec.rb

require 'spec_helper'

describe "User pages" do
  .
  .
  .
  describe "edit" do
    let(:user) { FactoryGirl.create(:user) }
    before do
      sign_in user
      visit edit_user_path(user)
    end
    .
    .
    .
  end
end

のノリで。