やりたいこと
rspecでログイン状態のヘッダー内容をテストしたい
RSpec.describe '共通系', type: :system do let(:user) { create(:user) } describe 'ヘッダーの表示' do context 'ログイン前' do before { visit root_path } describe 'ヘッダー' do it 'ヘッダーが正しく表示されていること' do expect(page).to have_content('ログイン'), 'ヘッダーに「ログイン」というテキストが表示されていません' end end end context 'ログイン後' do end
調査
他の人のgithubを参照した所
spec/rails_helper.rb
# FactoryBotの省略 config.include FactoryBot::Syntax::Methods # ログインモジュール config.include LoginModule
ログインモジュールをつけると実装できそう
実装
visit login_path fill_in 'Email', with: user.email fill_in 'Password', with: 'password' click_button 'Login'
これでログイン状態を実装することができるが、各ファイルでいちいち書くのは面倒なのでメソッドにしてModuleへ切り出してrails_helper.rbでincludeします
spec/support/login_module.rb
module LoginModule def login(user) visit login_path fill_in 'email', with: user.email fill_in 'password', with: 'password' click_button 'ログイン' end end
rails_helper.rb
# FactoryBotの省略 config.include FactoryBot::Syntax::Methods # ログインモジュール config.include LoginModule
これでlogin(user)でログイン状態を再現できるようになります。