オリジナルアプリの結合テストコードを書いている中、
ActiveHashを使用しているところのテストコードの書き方がわからず、
手こずってしまいました。
記事にして復習したいと思います。
FactoryBotとFakerは導入済みです。
バージョン
・Ruby 2.6.5
・Rails 6.0.0
新規投稿の結合テストコード
今回私が、結合テストコードを行う部分のページです。
「お題の投稿が上手く行く時」のコードを記述します。
context "お題が投稿できる時" do
it "ログインしたユーザーは投稿できる" do
# ログインする
visit new_user_session_path
fill_in "メールアドレス", with: @user.email
fill_in "パスワード(半角英数混合6文字以上)", with: @user.password
find('input[name="commit"]').click
expect(current_path).to eq(root_path)
# トップページに出題するボタンがあることを確認する
expect(page).to have_content("出題する")
# お題投稿ページに遷移する
visit new_post_path
# フォームを入力する
select '文章問題', from: 'post[genre_id]'
fill_in 'post[title]', with: @post.title
fill_in 'post[sentence]', with: @post.sentence
# 出題するボタンをクリックするとPostモデルのカウントが1つ上がる
expect {
find('input[name="commit"]') .click
}.to change { Post.count }.by(1)
# トップページへ遷移したことを確認する
visit root_path
# トップページに先ほどのお題が投稿されているか確認する
expect(page).to have_content(@post.title)
end
end
この記述が、新規投稿ができる時の記述です。
前後の記述は割愛させていただきます。
これは、フォームに情報を正しく入力して上手く投稿されるかを
テストしています。
注目していただきたい箇所は、「#フォームを入力する」の部分です。
ここで、ActiveHashの部分で使用するのが、「select」です。
先ほどのページを検証ツールで見た時
このようになります。
serectの引数には、option valueの部分を、fromの引数にはnameの部分を記述します。
これで無事テストコードが通りました。
フォームに情報を入力する際は、fill_inを使用していました。
何かを選択する場合は、selectを使用するということを学びました。
まだまだ、初心者のため記述に不備があるかもしれません。
その際は、お手数ですがコメントをいただければ幸いです。