ユーザー新規登録を例に、Active_hashを含む結合テストコードのやり方をアウトプットしていきます。
前提条件
・Rubyバージョン2.6.5
・Railsバージョン6.0.0
・Gemファイル内の:development, :test
に
「gem 'rspec-rails'」「gem 'factory_bot_rails'」を導入し、bundle install
済み
・Active_hashを作成してページに表示済み
結論
select '選択肢', from: 'name属性'
とする。
書き方
フォームに入力する動作をテストしたい時はfill_in
を用いますが、
Active_hashのプルダウン形式は「入力」ではなく「選択」となります。
そのためselect
を使って選択する動作をテストしていきます。
require 'rails_helper'
RSpec.describe "ユーザー新規登録", type: :system do
before do
@user = FactoryBot.build(:user)
sleep 0.2
end
context 'ユーザー新規登録ができる時' do
it '正しい情報を入力すればユーザー新規登録ができてトップページに移動する' do
# トップページに移動する
visit root_path
# トップページにサインアップページへ遷移するボタンがあることを確認する
expect(page).to have_content('新規登録')
# 新規登録ページへ移動する
visit new_user_registration_path
# ユーザー情報を入力する
fill_in 'email', with: @user.email
fill_in 'password', with: @user.password
fill_in 'password-confirmation', with: @user.password_confirmation
select "男性", from: 'user[gender_id]' //ここから下4行がselectの例です
select '1994', from: 'user[birthday(1i)]'
select '9', from: 'user[birthday(2i)]'
select '18', from: 'user[birthday(3i)]'
〜省略〜
<「選択肢」と「name属性」の調べ方>
検証ツールを活用してselect '選択肢', from: 'name属性'
に必要な情報を集めます。
①Active_hashの選択ボックスが表示されているページで「⌘ + option + i」(もしくは右クリックから選択)を実行して検証ツールを起動します。
②検証ツール枠内の一番左上にある矢印をクリックすると、ページ内のあらゆる要素に照準を合わせることができるので、その状態で選択ボックスをクリックします。
③すると検証ツールのElements内に、フォームのHTMLコードが表示されます。
これは性別のフォームをクリックした時の表示です。
ここから次の2つのことがわかります。
・optionタグに囲まれている3つの選択肢(---, 男性, 女性)
・name属性に指定されているuser[gender_id]
ぶっちゃけoptionタグに囲まれている選択肢はここを見ずとも、自分で設定したものなので分かると思います。
それよりも大事なのはname属性です。
下記のように、erbファイルのコードではname属性を記述していないのに、HTMLコードに変換されたものではしっかりとname属性が表示されています。
//name属性の記述はどこにも見当たらない
<%= f.collection_select(:gender_id, Gender.all, :id, :name, {}, {class:"select-box"}) %>
この現象にはform_withの特性が関与しています。
#form_withの特性
実はform_withで作成されているフォームには、何も指定しなくてもid名とname属性が自動で付与されるようになっています。
・id名:modelオプションに指定されている変数名_カラム名
・name属性:modelオプションに指定されている変数名[カラム名]
今回で言えば、
①form_withのmodelオプションに指定されている@user
②入力された値を保存するカラム名gender_id
そのため次のようになります。
・id名:user_gender_id
・name属性:user[gender_id]
なので仮に「model: @post
」と「カラム名 :prefecture_id」であれば、
・id名:post_prefecture_id
・name属性:post[prefecture_id]
以上のことから、select '選択肢', from: 'name属性'
に必要な情報は、検証ツールを使うことで見つけることができ、Active_hashを含む結合テストコードが可能となります。
これでActive_hashを含む結合テストコードの書き方の説明は終わりです!お疲れ様でした。
ご指摘などあれば、ご教授いただけると幸いです。