Cucumber + CapybaraでUserAgentを設定してテストを行う

jpmobileで作成されたRailsプロジェクトをテストする必要があったので調べてみました。

ちょっとググると次のサイトが出てきます。
Ruby 1.9 + Rails3 + jpmobileで構築したサイトをcucumberでテストするためのTips
Capybara::Driver::RackTestに細工をしてUserAgentを偽装する方法です。
ただし、手元にインストールされているCapybara1.1.2はCapybara::Driver::RackTestは無くなっており代わりにCapybara::RackTest::Driverが実装されていて、上記の偽装を行うことができません。

他の手を探してみたところ次の記事が見つかりました。
Creating a custom Capybara driver

この方法は新しいCapybaraのDriverを設定してしまう方法です。
features/support/env.rbに次を設定します。

  Capybara.register_driver :mobile do |app|
    Capybara::RackTest::Driver.new(app, 
      :headers => {'HTTP_USER_AGENT' => 'KDDI-CA39 UP.Browser/6.2.0.13.1.5 (GUI) MMP/2.0'})
  end

次にfeatures/step_definitions/web_steps_ja.rbに次を追記します。

前提 /^携帯端末でアクセスしている$/ do
  Capybara.current_driver = :mobile
end

これでモバイルサイト向けのfeaturesが書けますね。
各キャリア毎にDriverを設定しておけばテストの幅が広がっていい感じです。