別タブで開いた画面のテスト / 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で定義しているメソッドを使用することができるようになります。