8

質問のコンテキスト:

config/locales/en.ymlに存在することが重要な非常に重要な行があるとしましょう。

en:
  foo:
    bar: "bubla!"
  • すべての行をテストしたくはありませんが、
  • テストが脆くなりすぎないようにしたい (だから I18n.t('foo.bar').should =~ /bubla/)

私が現在テストしている方法はこのようなものです

#spec/locals_spec.rb

require 'spec_helper'
describe I18n do
  it do
    I18n.t('date.datepicker').should be_kind_of(String)
  end
end

このようにして、翻訳が存在し、それが継続しないことを確認しています (例: 'foo.bar.car.lol'

しかし、まだ満足していません

質問: RSpec で I18n 翻訳をテストするためのベスト プラクティスとは?

4

2 に答える 2

7

いくつかのアイデアについては、この StackOverflow の質問を確認してください。私の好ましい方法は、同じ質問に対するこの回答です。

更新: 最近、私はi18n に関連するテストを処理するためにi18n-tasks gem を使用する傾向があり、上記で書いたものや以前に StackOverflow で回答したものではありません。

RSpec テストで i18n を使用したかったのは、主にすべての翻訳があることを確認するためでした。i18n-tasks は、コードの静的分析を通じてそれ以上のことを実行できるため、すべてのテストを実行する必要はI18n.available_localesもうありません (たとえば、任意のロケールから別のロケールへの切り替えなど、非常にロケール固有の機能をテストする場合を除きます)。システムのロケール)。

これを行うことで、システム内のすべての i18n キーが実際に値を持っていること (そしてどれも未使用または廃止されていないこと) を確認できると同時に、反復テストの数を抑え、結果としてスイートの実行時間を短縮できます。

于 2012-07-05T20:22:36.857 に答える
-1

そのような「重要な」ことの受け入れテストを書くと思います。

ほとんどの場合、特定のコンテキストでの翻訳が必要です。日付ピッカーに何かを表示します。カピバラまたはjavascriptドライバーで動作するものを使用して、そのコンテキストをテストします。

この翻訳が存在することをテストするだけでは、それが使用されているコンテキストがなければ役に立ちません。

于 2012-07-05T15:44:41.460 に答える