###テストを実行したい該当のコード
ツアー情報を投稿する際に、ジャンルを選択して保存するようにさせている。
selectタグでvalueが1のoptionを選択してジャンルを保存するテストをやってみたい
とあるページを参考にHTMLに表示される内容(以下だと冒険)を入力してテスト走らせてみた。
it 'tour投稿に成功する' do
select '冒険', from: 'tour[genre_id]'
end
###ハマったエラー
Failure/Error: select '冒険', from: 'tour[genre_id]'
Capybara::ElementNotFound:
Unable to find option "冒険" within #<Capybara::Node::Element tag="select" path="/HTML/BODY[1]/DIV[1]/DIV[1]/DIV[1]/DIV[1]/FORM[1]/DIV[3]/DIV[1]/TABLE[1]/TBODY[1]/TR[1]/TD[2]/SELECT[1]">
冒険なんて見つからへんぞってめちゃくちゃ怒られた。
ここで、「やはりvalueを指定してやらないと、できないのではないか???」と、疑い始める。
###select '', from: '' じゃなくても実現できるみたい
find("option[value='<該当するvalueの値>']").select_option
修正して実行してみる
Failure/Error: find("option[value='1']").select_option
Capybara::Ambiguous:
Ambiguous match, found 2 elements matching visible css "option[value='1']"
しかし、またキレられた。
なんやら要素が2つあるから特定できひんやんけ!!!!って吠えている
このエラーの原因はもう1つのselectが存在しているからみたいだ。実はジャンル以外にもう1つ、都市を選択するselectタグが存在している
###どのselectタグなのか指定してやる
Rspecパイセンがどのselectと立ち向かえばいいか迷わないように、selectタグにあるidを指定してやる。
find("#tour_genre_id").find("option[value='1']").select_option
find("#tour_city_id").find("option[value='1']").select_option
無事にぶっ倒しました。経験値5000ぐらい得た気する
###メモメモ
fill_inやselectは便利やけど、どうやら不安定なことも多いみたい。。。
今回のようにfindで要素を特定して、入力する書き方の方が安全だったり、そうだったり、ラジバンダ、、、。
通っていたテストが時々通らなかったりするのは不安定なことが原因にあるのかよ。知らんかった時はいつもめちゃくちゃ悩んでいたのに