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

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

スポンサーリンク

— 環境 —
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 もおすすめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!