経緯
オリジナルアプリケーションの結合テストコードを記述していたところ、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
備忘録も兼ねて投稿しました。