2
1

More than 3 years have passed since last update.

結合テストコード ActiveHashの場合

Last updated at Posted at 2021-02-24

オリジナルアプリの結合テストコードを書いている中、
ActiveHashを使用しているところのテストコードの書き方がわからず、
手こずってしまいました。
記事にして復習したいと思います。
FactoryBotとFakerは導入済みです。

バージョン

・Ruby 2.6.5
・Rails 6.0.0

新規投稿の結合テストコード

Image from Gyazo

今回私が、結合テストコードを行う部分のページです。
「お題の投稿が上手く行く時」のコードを記述します。

 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」です。
先ほどのページを検証ツールで見た時

Image from Gyazo

このようになります。
serectの引数には、option valueの部分を、fromの引数にはnameの部分を記述します。
これで無事テストコードが通りました。
フォームに情報を入力する際は、fill_inを使用していました。
何かを選択する場合は、selectを使用するということを学びました。

まだまだ、初心者のため記述に不備があるかもしれません。
その際は、お手数ですがコメントをいただければ幸いです。

2
1
3

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
2
1