Capybara::ElementNotFound: cannot select option, no option with text 'hoge' in select box 'fuga'
このエラーメッセージでぐぐってきた人に伝えよう。
RTFM!
http://rubydoc.info/github/jnicklas/capybara/Capybara/Node/Actions#select-instance_method
fill_inを使ったテストに慣れてきてselect boxとか他のコントローラもやってみっか!とオラわくわくしてきた人なんじゃないだろうか。
fill_inは以下の順番を取る
- フォームの要素名(←なんて言うの?コントローラ?)
- テキスト欄に入力する内容
fill_in "hoge", with: "fuga"
これは
<input type="text" id="hoge">
のvalueに"hoge"を入力する、という意味だ。
ちなみに要素の指定はnameでもlabel textでもいい。
一方select boxの場合は
select "fuga", from: "hoge"
と言った具合になる。この場合
<select id="hoge" name="hoge"> <option value=""></option> <option value="1">fuga</option> </select>
のfugaのoptionが選択される。
つまり、普通に英語を読むようなIFになっているわけですな。
I fill in "hoge" with "fuga".
I select "fuga" from "hoge".
という訳ですよ。
あと二重にハマったんだけど、selectで選択する対象はvalueじゃなくて、optionに挟まれるtextだからね!