【RSpec】結合テストコードでプルダウンから選択する処理をする方法

オリジナルアプリの結合テストコードを書いていた時に、Activehashを使って実装したプルダウンの選択式フォームをテストコードでどうやって表現したらいいんだ?ってなったので、その方法を書きます。 Activehashを使った実装でなくても、selectタグとoptionタグでプルダウン選択の実装はできるので、テストコードも同じになるかと思います。

僕が最初にやろうとしたこと

  1. まずプルダウンを展開させるためにクリック
find('.select-box').click

2. 適当な値を選択してクリック しようとしたけど...あれ? name属性が無い。valueしかない。
Image from Gyazo
一応valueの値、文字列、親要素のname属性とかで指定したりしてみたけど、エラー。

考えたこと

そもそも、このフォームの値として送信されるのは選択した文字列ではなくて選択番号だということ。
だからクリックするユーザーアクションとしては正しいけど、処理としてはclick_onやfind().clickを使うのは適切ではない気がする。

自分の知識の範囲では答えが出そうになかったので調べたらすぐ解決できた

1 . まずプルダウンを展開させるためにクリック

find('.select-box').click

ここは一緒。

2 . プルダウンメニューから選択する場合、Capybaraで要素を選択するには以下のように書く。

select '新品', from: 'item-sales-status'

ここでは適当に'新品'を選択することにします。
構文としては

select '文字列(ラベル)', from: '親要素プルダウンメニューのid'

知っていれば何のことはないですね。勉強になりました。

終わりに

これから基礎の復習をしていきたいと思っているので、基礎的な内容をこまめにアウトプットしていけるように頑張っていきたいと思います。それと、自分のオリジナルアプリ語りもしたいところですな。