経緯
オリジナルアプリケーションの結合テストコードを記述していたところ、activehashを用いた選択肢の部分で通常のフォームとは異なるため、記述の仕方がわからなかった。
開発環境
Ruby:2.6.5
Rails:6.0.6.1
書き方
フォーム入力する際はfill_inを用いるが、activehashを用いたテストコードは以下の形式で記入する。
select '選択肢', from: 'name属性'
selectの選択肢に箇所はプルダウンの選択肢を文字列として記載する。(htmlとして確認する場合は、検証ツールからoptionタグで囲まれているものを記述)
fromのname属性は、該当箇所を検証ツールで開いて確認して記載する。今回は性別の箇所を検証ツールで確認して、nameのuser[sex_id]をfrom:の後ろに記載する。
users.spec.rb
require 'rails_helper'
def basic_pass(path)
  username = ENV["BASIC_AUTH_USER"]
  password = ENV["BASIC_AUTH_PASSWORD"]
  visit "http://#{username}:#{password}@#{Capybara.current_session.server.host}:#{Capybara.current_session.server.port}#{path}"
end
RSpec.describe "ユーザー新規登録", type: :system do
  before do
    @user = FactoryBot.build(:user)
  end
  context 'ユーザー新規登録ができるとき' do 
    it '正しい情報を入力すればユーザー新規登録ができてトップページに移動する' do
      # トップページに移動する
      basic_pass root_path
      visit root_path
      # トップページにサインアップページへ遷移するボタンがあることを確認する
      expect(page).to have_content('新規登録')
      # 新規登録ページへ移動する
      visit new_user_registration_path
      # ユーザー情報を入力する
      fill_in 'メールアドレス', with: @user.email
      fill_in 'パスワード', with: @user.password
      fill_in 'パスワード(確認)', with: @user.password_confirmation
      fill_in 'ニックネーム', with: @user.nickname
      select "男性", from: 'user[sex_id]'
      select "161 - 165cm", from: 'user[height_id]'
      select "71 - 75kg", from: 'user[weight_id]'
省略
最後にコマンドを入力してテストが成功するか確認する。
bundle exec rspec spec/system/users_spec.rb
備忘録も兼ねて投稿しました。

