【rails】widthではなくデバイス判定の時のRspec
browser gem
ボタンの表示・非表示の制御をcssのwidthでやることも可能だが、gemを使って判別させることも可能。
そこで使うのがbrowser
というgem。
gem 'browser'
コレでPCかスマホかの判別はもちろん、使用しているブラウザが何かも判別できる。
# スマホかどうかの確認。 browser.device.mobile? # ieか確認 browser.ie?
最近はchromをメインに開発しているのが、ieやedgeは挙動が異なることもあるのでコレを使うことで挙動の制御をしやすくなる。
Rspecをどうかくか問題
cssのwidthで制御しているのであればfeatureスペックを書くときにはサイズの変更をする必要がある。
Capybara.current_session.driver.browser.manage.window.resize_to(1200, 500) # 1200がwidth, 500がheght
ところが、browser
を使っているとサイズを変更したところでテストしているブラウザがPCだと変更する事ができない。
なので、User Agent
を上書きする必要がある。
context 'ボタンの表示' do before do # 今回はひとまずiPhoneで設定 user_agent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/38.0.2125.67 Mobile/12B411 Safari/600.1.4' Capybara.current_session.driver.header('User-Agent', user_agent) end context 'ボタンの表示' do ブラウザによって出し分ける確認 end end
まとめ
最近はレスポンシブデザインが基本になってきているからブラウザ判断はあまり必要ないかもしれないけど、写真撮影のボタン出し分けとかはスマホ特有の機能だったりするのでfeatureスペックを書くときには必要になるかも。