1

欠落している翻訳ルックアップのテストを書いています — RSpec の初心者です。言い換えれば、ビューで表示されるすべてのテキストが translate メソッドを介して渡されるという仕様を書いています。

翻訳の欠落ではなく、翻訳ルックアップの欠落 (ソース コードに #t または #translate メソッドの呼び出しがない) を指します。

そのために、i18n 変換メソッド (I18n#t) をスタブ化します。

それを行うには、RSpec2 が使用しているビュー インスタンスを見つけるにはどうすればよいですか? このビュー インスタンスには、モジュール ActionView::Helpers::TranslationHelper が含まれています。そのビュー オブジェクトへのアクセスを取得できれば、translate メソッドをスタブ化できると思います。ところで、@controller から始めるべきだと思います。

ビューの変換ヘルパー メソッド #t を見つけてスタブ化することを除いて、仕様の他のすべては通常の方法で機能します (失敗したテストを含む)。render_views を使用しています。

(さまざまな方法で) #helper、#translate、#view を試しました。多分私は何かを逃していますか?

メソッド #translate を使用してすべてのオブジェクトを ObjectSpace で (私のテストで) 検索すると、クラスが I18n::Backend::Simple であるため、オブジェクトを取得できました。したがって、私の仕様は機能しますが、コードが ObjectSpace を検索する必要がなければ、おそらくはるかに高速になります!

背景として、最も単純なテスト計画は、RSpec コントローラー テストで各コントローラーのアクションをループし、目に見えるアルファベット文字を探すことのようです。まず、Rails の変換ヘルパーをスタブして空の文字列を返します。また、タグ名だけでなく、スクリプトやスタイルのタグも削除します。

私の Gemfile には、capybara 1.1.4、capybara-webkit 0.12.1、factory_girl 4.1.0、factory_girl_rails 4.1.0、rails 3.2.9、rspec 2.12.0、rspec-rails 2.12.0 が含まれています。

4

1 に答える 1

0

適切なオブジェクトを見つけた後でも、不可解なことに RSpec のスタブ化 (またはそう思っていた) が他のテストに違反していました。

before(:each) { object.stub   :translate, true }
after( :each) { object.unstub :translate       }

代わりに、私はうまく使用しました:

  • I18n::Backend::Simple のインスタンス メソッド #translate の Alias_method_chain、および
  • #translate を空文字列モードに切り替える Ruby グローバル変数。

後で、他のテストを破っていたのは Formtastic の i18n キャッシングである可能性が高いと結論付けました。これを修正するための適切な設定 (config/initializers/formtastic.rb 内) は次のとおりです。

Formtastic::FormBuilder.i18n_cache_lookups = ! (Rails.env.development? || Rails.env.test?)

ただし、まだビューインスタンスが見つかりません。それが私が知りたいことです、質問で!それで、私に答えを教えてください。うまくいくものを受け入れます。

于 2012-12-30T01:45:01.483 に答える