気ままに気ままのエンジニアブログ

定期的に得た知見を気ままに発信中

【rspec / capybara】RuntimeError: Must pass a hash containing 'with'の解決方法

こんにちは。

この暑させっかく夏好きになったのに、もはや嫌いになりそう。

どうもハチマキです。

はじめに

業務で発生したエラーのメモを書いていきます。
忘れないうちのメモメモっと。

本日の概要 : RuntimeError: Must pass a hash containing 'with'の解決方法

事象

featureテストの書いた際にエラーが発生
具体的には、fill_inメソッドを使って、フォームに値が反映されているか確認するテスト

エラー例

Failure/Error: fill_in 'hoge'

 RuntimeError:
   Must pass a hash containing 'with'

問題点

大きく2点が問題でした。

  • :withパラメーターで文字列が指定されていない
  • labelでなくテキストフィールド側のIDに合わせた値ではなかった

解決方法

テストファイル

fill_in 'hoge', with: 'test''hoge'の部分はidを、'test'の部分はvalueを記述
click_on "更新"

expect(page).to have_text("test")

viewファイル

= form_tag(~~_path, method: :'post') do
 %ul
  %li
   = label_tag :hoge
   = text_field_tag :hoge, class: 'form-control'
  %li
   = label_tag :fuga
   = text_area_tag : fuga, '', size: "40×3", placeholder: "testです"
  
  %li
   = submit_tag '更新', class: 'form-btn'

これだけ!簡単でした!
IDがわからない場合は、ブラウザの開発者ツールを使って探すとすぐ見つかると思います。