Rails で i18n 化に RSpec + Capybara のテストを対応させる

スポンサーリンク

i18n 化とともに、RSpec + Capybara で書いているテストを、多言語化に対応させるように改修中なのですがなかなか面倒くさい。

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

— 環境 —
rails-4.0.1
rspec-rails-2.14.0
capybara-2.2.0

RSpec テスト中で I18n.t メソッドを使う

ビューファイルは辞書ファイル(config/locales/**/ja.yml など)へのキーで置き換わるので、当然ながら以下のようにビューファイルの表示文字を直書きしていたテストは通らなくなります。

i18n 化とともに、以下のように変更しなければならない。

実装に依存する部分は、最初の describe の冒頭の before で、変数に割り当てておいたほうが良いかもしれません。

サポート用の t メソッドを作成

あとは、毎回 I18n.t と書くのが面倒くさいので、spec/support/utilities.rb に以下のメソッドを作りました。ちょっとでも楽するためにやったのはせいぜいこれくらい。

spec/support/utilities.rb

これで spec 内で、I18n.t → t と書けるので少しタイプ文字が減ります。

【追記 2014/02/27】
当初、t_s メソッドという名前で作成していましたが、t メソッドに変更しました。これでビューで呼ぶのと同じ形式。spec 以下ディレクトリでは、I18n.t としないと t メソッドを使えないため、これはオーバーライドにはならない。

実際のテストコードの例

spec/requests/user_session_pages_spec.rb

一応これで、テストは通るようになるのですが、正直あまりいけてない臭がぷんぷんします。i18n 利用時の RSpec のベストプラクティスをご存知の方がおられましたら、ぜひ教えて下さい!

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

Leave Your Message!