16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rack_session_access を使って Feature spec でログイン状態を作る

Last updated at Posted at 2015-01-05

最近やっと Feature spec を書き始めました。

Feature spec の中で、ログイン状態をエミュレートしたいのはよくある話かと思いますが、
rack_session_access という gem で上手く実現出来たので、その手順をメモしておきます。

以下 Rails の例になります。

Gemfile
group :test do
  gem 'rspec-rails'
  gem 'capybara'
  gem 'rack_session_access'
  gem 'factory_girl_rails' # 例のために追加、必須ではないです
  ...
end

Test 環境で RackSessionAccess::Middleware を使うように指定します。

config/environments/test.rb
[MyRailsApp]::Application.configure do |config|
  ...
  config.middleware.use RackSessionAccess::Middleware
  ...
end

ログイン用の Helper を作っておきます。

spec/support/login_helper.rb
module LoginHelper
  def login_as(user)
    page.set_rack_session(user_id: user.id)
  end
end

上記の Helper を RSpec に include するように指定します。

spec/rails_helper.rb
require 'rack_session_access/capybara'

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f }

RSpec.configure do |config|
  ...
  config.include LoginHelper
  ...
end

使い方は以下のように backgroud ブロックの中で login_as を呼び出して、ログイン状態を作りだします。

spec/features/xxx_spec.rb
feature 'パスワードの変更' do
  let!(:user) { create(:user) }

  background do
    login_as user

    visit edit_user_password_path
  end
  
  scenario 'XXX' do
    ...  
  end
end

以上でログイン状態をエミュレートすることが出来ました。

16
14
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
16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?