読者です 読者をやめる 読者になる 読者になる

リア充爆発日記

You don't even know what ria-ju really is.

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は以下の順番を取る

  1. フォームの要素名(←なんて言うの?コントローラ?)
  2. テキスト欄に入力する内容
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だからね!