前提
factory_botなどの設定は済んでいるものとします。
gems
まずは、以下のgemをインストールします。
group :test do
gem 'capybara'
gem 'webdrivers'
end
spec/rails_helperの編集
次にspec/rails_helper.rb
に以下のように追記し、Capybaraが使えるようにします。
require 'capybara/rspec'
RSpec.configure do |config|
config.include SystemHelper, type: :system
end
headlessの設定
続いて、spec/spec_helper.rb
ファイルへ以下を追記し、system specをヘッドレスで実行するように設定します。なお、ここでスクリーンサイズも設定することで、レスポンシブ対応での不具合への対処できます。
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :selenium, using: :headless_chrome, screen_size: [1920, 1080]
end
end
モジュール化
認証テストを行う際に、何度もログインさせる記述を書くことになるかと思うので、いっそのことモジュールかしておこうと思います。
フォルダ、ファイル名は任意ですが、今回はspec/supports/login_helper.rb
ファイルにその処理をまとめることにします。
module LoginHelper
def login
user = create(:user)
visit login_path
fill_in 'メールアドレス', with: user.email
fill_in 'パスワード', with: 'password'
click_button 'ログイン'
end
end
次に、上記で作成したファイルを使えるようにspec/rails_helper.rb
を編集します。
Dir[Rails.root.join('spec/supports/**/*.rb')].each { |f| require f }
Rspec.configure do |confgi|
///
以上の設定で、モジュール化したlogin
メソッドが使用できるようになりました。
spec内容の例
require 'rails_helper'
Rspec.describe 'Authentication', type: :sytem do
describe 'logout' do
before do
login
end
it 'is able to logout' do
click_on 'Log out'
expect(current_path).to eq login_path
end
end
end