- 更新日: 2014年4月7日
- RSpec
ユーザーがアカウント設定ページでロケールを変更させるテスト
Rails アプリを多言語化(英語化)させた場合、ユーザーのアカウント設定ページのフォームで、ロケール情報(使用言語の情報)を変更できるようすると思うのですが、ユーザーがロケールを更新した場合のテストを書きました。
Devise の認証エンジン使用時に、RSpec + Capybara で、ユーザーが自分のアカウント設定ページに行ってロケールを変更する動作をシミュレートしています。
— 環境 —
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
describe "User registration pages" do describe "edit locale" do let(:user) { FactoryGirl.create(:user) } let!(:user_org_locale) { user.locale } specify { expect(user.locale).to eq "ja" } specify { expect(I18n.locale).to eq :ja } describe "after changing user's locale by edit_update submit" do before do login user visit edit_user_registration_path select "英語 (English)", from: "user_locale" click_button "変更を保存" # 翻訳ミスが出る場合は、click_button の代わりに以下を使用 # find("#edit_user").find('input[type="submit"]').click end after do user.update_attribute(:locale, user_org_locale) visit edit_user_registration_path end specify { expect(user.reload.locale).to eq "en" } specify { expect(I18n.locale).to eq :en } end end end |
上記テストで行っているテストの流れ
ロケール更新のセレクトフォームは、最初は以下のように出力されているとします。
1 2 3 4 |
<select id="user_locale" name="user[locale]"> <option selected="selected" value="ja">日本語 (Japanese)</option> <option value="en">英語 (English)</option> </select> |
上記のテストで、最初は作成されたユーザーのロケール(user.locale)と I18n.locale の両方が日本語であることを確認しています。
その後、select フォームで “英語 (English)” を選択してサブミット。変更後はロケールが英語に変わっていることを確認しています。
最後に after do で、元々のユーザーロケールに戻す動作を念の為に行っています。
一応テストは全て想定したとおりにパスしましたが、ユーザーがアカウント設定ページでロケール変更するテストはこんな感じで良いでしょうかね?多言語化環境やロケール変更での RSpec 情報は少ない感じですが、多言語化するとテストがデリケートになる感じです。
- RSpec の関連記事
- FactoryGirlをSpringと共に使う時の注意
- 複数モデルのpost :createをテストするRSpecコード(Controller Spec)
- RSpec3でTime.nowをスタブ化(stub)
- RSpecでJSONによるPOSTリクエストをテスト
- RSpec & Capybara の雑感
- RSpec+Capybaraで同名の複数要素の並び順をテストする
- RSpec3ではrails_helper.rbがrequireされる
- Capybara + Launchy で RSpec テストをブラウザで確認
- CapybaraのwithinをRSpecで使う
- Serverspec(RSpec)のテスト出力に色を付けて見やすくフォーマット
Leave Your Message!