初めに
今回は結合テストコードの記述を短く、可視性を高めるために
繰り返し使用するログイン動作をまとめました。
サポートモジュールとは?
RSpecに用意されている、メソッド等をまとめる機能のことです。
「ログインしたら投稿ページに遷移できる」
「ログインしたら編集ページに遷移できる」
「ログインしたら削除ページに遷移できる」等
複数出てくる同じ処理をまとめることができます。
使い方
①ディレクトリとファイルを作成
specディレクトリ配下に
supportディレクトリを作成し
その配下にsign_in_support.rbを作成します。
(ファイル名はご自身がわかりやすいものでOKです!
今回はログインのため「sign_in_support」という名前にしています)
🗂 spec
🗂 factories
🗂 models
🗂 requests
🗂 support こちらのディレクトリを作成
∟ sign_in_support.rb こちらのファイルを作成
🗂 system
②sign_in_support.rbファイルに記述
module内にログインの流れを定義します。
module SignInSupport
def sign_in(user)
root_path
visit new_user_session_path
fill_in 'メールアドレス', with: user.email
fill_in 'パスワード(英数字6文字以上)', with: user.password
find('input[name="commit"]').click
expect(current_path).to eq(root_path)
end
end
※fill_in等 記述の書き方や意味に関してはこちらの記事でまとめています。
③サポートモジュールを読み込む設定をする
以下2点を行います。
1. rails_helper.rbのコメントアウトを外す
2. モジュールを設定する
- Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }という記述のコメントアウトを外して、読み込まれるようにします。
#23行目あたりにある記述のコメントアウトを外す
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
2.同ファイルのRSpec.configureの中に、以下のようにモジュール名を明記する
「config.include SignInSupport」を追加する
RSpec.configure do |config|
config.include SignInSupport #こちらの1行を追加
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
#以下省略
※別名にした際は「SignInSupport」を別名の記述に合わせてご入力ください。
④結合テストコードでの呼び出し方法
・sign_in(user)を使用して呼び出す
※FactoryBot使用の際は、適宜使用できる変数に変更する
(今回の場合は@をつけています)
RSpec.describe '新規投稿', type: :system do
before do
@user = FactoryBot.create(:user)
@item = FactoryBot.build(:item)
end
context '新規投稿ができるとき'do
it 'ログインしたユーザーは新規投稿できる' do
# ログインする
sign_in(@user) #こちらを追加
# 投稿ページに移動する
以下省略
まとめ
最後までご覧くださり、ありがとうございました。
今回はサポートモジュールで結合テストコードの記述を短くするため
ログイン動作をまとめた実装の記録でした。
初学者のため、記入漏れや記述ミスがありましたら教えていただけると助かります。
こちらの記事がどなたかの参考になりましたら幸いです。
関連
【Rails/System Spec/Capybara】結合テストコードを書くときによく使う表現 一例
【Rails】結合テストコードの書き方(新規登録に関するテストコード)