ユーザーがアカウント設定ページでロケールを変更させるテスト

スポンサーリンク

Rails アプリを多言語化(英語化)させた場合、ユーザーのアカウント設定ページのフォームで、ロケール情報(使用言語の情報)を変更できるようすると思うのですが、ユーザーがロケールを更新した場合のテストを書きました。

Devise の認証エンジン使用時に、RSpec + Capybara で、ユーザーが自分のアカウント設定ページに行ってロケールを変更する動作をシミュレートしています。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
rails-4.0.1
rspec-rails-2.14.0
capybara-2.2.0
devise-3.2.2
omniauth-1.1.4

Rails4 で i18n で英語化(多言語化) | EasyRamble
RailsでGeoIPのIPアドレスからロケール判定する際の注意点 | EasyRamble

上記エントリーあたりで書いた set_locale メソッドで、ユーザーのロケールが判定されるものと前提しています。

ユーザーがロケールを変更する RequestSpec

spec/requests/user_registration_pages_spec.rb

上記テストで行っているテストの流れ

ロケール更新のセレクトフォームは、最初は以下のように出力されているとします。

上記のテストで、最初は作成されたユーザーのロケール(user.locale)と I18n.locale の両方が日本語であることを確認しています。

その後、select フォームで “英語 (English)” を選択してサブミット。変更後はロケールが英語に変わっていることを確認しています。

最後に after do で、元々のユーザーロケールに戻す動作を念の為に行っています。

一応テストは全て想定したとおりにパスしましたが、ユーザーがアカウント設定ページでロケール変更するテストはこんな感じで良いでしょうかね?多言語化環境やロケール変更での RSpec 情報は少ない感じですが、多言語化するとテストがデリケートになる感じです。

スポンサーリンク
私は Rails のテストフレームワークには RSpec を使っています。サーバーのテスト用に Serverspec もおすすめです。
 
スポンサーリンク

Leave Your Message!