【Rails】Ratyを用いた星評価機能のテスト【Rspec】


はじめに

Ratyを用いて評価機能を実装したのですが、結合テスト実行時に手間取ったので記事として残しておきます。
知っていればなんということはないのですが、初学者の方の助けになれば幸いです。

評価機能


Ratyを用いて実装された評価機能。実装方法については割愛しますが最後に参考になりそうな記事を紹介しているのでトライしてみたい方はぜひ。

それぞれの項目のいずれかの星マークをクリックする動作をさせたいので検証ツールを使って要素をみていきます。

検証


なるほどimgタグを見つけてクリックしてあげればいいんですね。

rspec.rb
find("img").click

エラー


当たり前ですが「どのimgなのかハッキリしろ」と怒られました。
imgタグは他にも存在するのでどの要素なのかプログラムが判別できるようにしてあげないといけません。

正しいコード

rspec.rb
find('#taste_star').find("img[alt='5']").click

最終的にこのコードでテストをクリアできました◎ 1つずつ見ていきましょう。

findの重ね使い

普段それぞれの要素に一意のidを指定することが多く一発で要素を拾えることばかりだったので個人的に盲点だったのですが、findは重ねて使えます。
まずは親要素に指定しているid="taste_star"を拾うことでその後ろに続くimgタグの該当範囲を絞り込めます。

要素[属性]

まだ同一の親要素の中にimgタグが複数存在しているので個別に振り分けられているalt属性を利用します。
属性を指定したい場合は角カッコで括ってあげればOKです。

click

あとは画像をクリックさせたら完成です!

ちなみにclick_onを使ってリンクやボタンをクリックさせることもできますが、画像の場合はalt属性を指定します。今回の場合はalt属性の値が一意でないのでエラーが出ると思います。

最後に

記事に纏めながら改めて簡単なところで躓いてしまったなと反省しました。

参考

jquery.raty rails導入
Railsで「Raty」を使った星機能をつける
使えるRSpec入門・その4「どんなブラウザ操作も自由自在!逆引きCapybara大辞典」