1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】Active_hashの結合テストコードの書き方【Rspec】

Last updated at Posted at 2021-10-11

ユーザー新規登録を例に、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コードが表示されます。

de5fad3f07a47edb4c1d8f66bc8558d4.png

これは性別のフォームをクリックした時の表示です。
ここから次の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を含む結合テストコードの書き方の説明は終わりです!お疲れ様でした。
ご指摘などあれば、ご教授いただけると幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?