学習記録

アウトプット用に作りました

別タブで開いた画面のテスト / ApplicationHelperのメソッドをRSpecでも使用

別タブで開いた画面をテストする方法

下記のコードのようにUserの一覧ページからUserの詳細ページに移るときにtarget: :_blankを使って別タブで表示するような実装をしている部分のテストを書いていきます。

<%= link_to "詳細",  users_path(@user), target: :_blank, rel: "noopener noreferrer" %>

rel: "noopener noreferrer"この記述はセキュリティの問題を回避するために必要です。
参考 : 【Rails Tutorial】target="_blank"で新しいページを開くときのセキュリティ対策|Artefact|note

別タブのテストを抜粋して、テストコードを書いていきます。
※事前にuserのFactoryBotとsystem/user_spec.rbファイルを作成しておきます。

RSpec.describe 'User', type: :system do
  let!(:user) { create(:user) }

  describe 'User一覧' do
    context '正常系' do
      it 'User一覧ページから詳細ページにアクセスできること' do
          visit users_path
          click_link '詳細'
          switch_to_window(windows.last)
          expect(page).to have_content user.name
          expect(current_path).to eq users_path(user)
      end
    end
  end
end

switch_to_window(windows.last)最後に開いたページを別タブで開くことができるコードです。ここでいう最後に開いたページはclick_link '詳細'で開いたページになります。

参考 : Capybaraと仲良くなる(タブ・ウィンドウの操作について) - Qiita


ApplicationHelperのメソッドをRSpecでも使用する方法

application_helper.rbファイルにはビューで使用したい機能のために追加していくメソッドを置いてあります。ここで定義したメソッドのことをヘルパーメソッドと呼びます。

例えば時間の表記を指定するメソッドを作成してみます。Time.currentを使用すると2021/04/22 10:00:00のようにとても細かい表記になってしまいます。そのためわかりやすい表記に変えるためにstrftimeを使用してカスタマイズしています。
参考 : Time#strftime (Ruby 3.0.0 リファレンスマニュアル)

helpers/application_helper.rb

module ApplicationHelper
  def short_time(datetime)
    datetime.strftime("%-m/%d %-H:%M")
  end
end

ビューで使用するために作ったこのメソッドをRSpecで使うには、spec/rails_helper.rbでApplicationHelperをincludeするだけです!

RSpec.configure do |config|
  include ApplicationHelper
end

これで全てのspecファイルにてapplication_helper.rbで定義しているメソッドを使用することができるようになります。