最近やっと 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
以上でログイン状態をエミュレートすることが出来ました。