0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails/System Spec】サポートモジュールで結合テストコードの記述を短くする(ログイン動作をまとめる)

Last updated at Posted at 2022-05-31

初めに

今回は結合テストコードの記述を短く、可視性を高めるために
繰り返し使用するログイン動作をまとめました。

サポートモジュールとは?

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内にログインの流れを定義します。

sign_in_support.rb
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. モジュールを設定する

  1. Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }という記述のコメントアウトを外して、読み込まれるようにします。
spec/rails_helper.rb
#23行目あたりにある記述のコメントアウトを外す
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }

2.同ファイルのRSpec.configureの中に、以下のようにモジュール名を明記する

「config.include SignInSupport」を追加する

spec/rails_helper.rb
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使用の際は、適宜使用できる変数に変更する
(今回の場合は@をつけています)

spec/system/items_spec.rb
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】結合テストコードの書き方(新規登録に関するテストコード)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?