アプリ内のユーザーの表示順を任意に変更する機能のテストを書く上で、正規表現も含めて勉強になったのでメモを残します。
2人のuser
の表示順が正しく変更されているかをテストします。
#テスト
spec/system
RSpec.describe '表示順変更テスト', type: :system do
let!(:user) { FactoryBot.create(:user) }
let!(:other_user) { FactoryBot.create(:other_user) }
describe '表示順を変更する' do
it 'ユーザー表示順を変更できる' do
#user→other_userの順番で表示されていることをテスト
expect(page.text).to match %r{#{user.name}.*#{other_user.name}}
#other_user→userの順番で表示されていないことをテスト
expect(page.text).not_to match %r{#{other_user.name}.*#{user.name}}
#表示順を変更する処理を記述
#変更に成功し、user→other_userの順番で表示されていないことをテスト
expect(page.text).not_to match %r{#{user.name}.*#{other_user.name}}
#変更に成功し、other_user→userの順番で表示されていることをテスト
expect(page.text).to match %r{#{other_user.name}.*#{user.name}}
end
end
end
※%r{}
で正規表現を生成
#正規表現について
%r{#{user.name}.*#{other_user.name}}
#*user.nameはイチロー、other_user.nameはジロー
上記の箇所では正規表現の/イチロー.*ジロー/
が生成されています。
正規表現において.*
は「任意の文字列に一致」という意味です。
つまり、page.text
の中に、イチロー(任意の文字列)ジロー
が含まれているかどうかをテストしており、ジロー(任意の文字列)イチロー
の場合は不一致となるため、表示順をテストすることができます。