目標
ログイン処理を共通化する。
開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・rspec-rails: 4.0.1
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina
実装
1.support
ディレクトリを作成
$ mkdir support
2.support
ディレクトリ内にファイルを作成し、編集
$ touch spec/support/login_macros.rb
login_macros.rb
module LoginMacros
def login(user)
fill_in 'メールアドレス', with: user.email
fill_in 'パスワード', with: user.password
click_button 'ログイン'
end
end
3.rails_helper.rb
を編集
rails_helper.rb
# 23行目をコメントアウト
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
RSpec.configure do |config|
config.include LoginMacros # 追記
end
【解説】
① support
ディレクトリを読み込む。
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
② 2
で定義したモジュールを使用できるようにする。
config.include LoginMacros
4.メソッドを使用する
require 'rails_helper'
RSpec.describe '認証のテスト', type: :feature do
let(:user) { create(:user) }
subject { page }
describe 'ユーザー認証のテスト' do
context 'ユーザーログインのテスト' do
it 'ログインできること' do
visit new_user_session_path
login(user) # メソッドを使用
is_expected.to have_content 'ログアウト'
end
end
end
end