はじめに
予約画面などのフォームを作る際、
何かしらの値(ログインユーザー名など)があらかじめ入力されていてほしい、という場面が出てきました。
フォームにあらかじめ値が入っていることをRSpec+Capybaraを使ってテストしましたので、そのやり方をメモします。
実行環境
この記事は以下の環境で動作確認しています。
ruby (2.3.7)
rails (5.2.3)
capybara(3.15.1)
rspec-rails(3.8.2)
テスト方法
ビュー側で以下のフォームが定義されているとします。
<%= form_for(@booking, url: new_booking_path) do |f| %>
<%= f.label "名前" %>
<%= f.text_field :name, value: (current_user.name if user_signed_in?), id: "name" %>
・・・
<% end %>
この場合、ログインユーザー名があらかじめ名前フォームに入っているはずです。
以下のコードを用いて、この状態をテストできます。
expect(find_field('name').value).to eq "John"
"name"のフィールド要素を持つフォームに"John"と入力されているかテストしています。
"John"の部分はテストしたい内容に合わせて適宜変えてください。