2011-07-11 2 views
1

私は多言語アプリケーションを持っており、私のコントローラの1つに対していくつかのテストを書こうとしています。しかし、テストでは現在のロケールを変更できないようです。それは開発で大丈夫です。Rails 3のテスト時に現在のロケールを変更できないのはなぜですか?

test "do something has to be done correctly" do 
    I18n.locale = :cn # set current locale to chinese 
    assert_equal :cn, I18n.locale 
end 

このテストでは、エラーで失敗します:

<:cn> expected but was 
<:en>. 

:enは私の設定で、デフォルトロケールで次のように私のテストであることを前提としています。

以前にこの問題が発生したのは誰ですか?解決策は見つかりましたか?

+0

default_localeを上書きするとどうなりますか? – apneadiving

+0

あなたのコメントの後、私は 'I18n.default_locale =:cn; assert_equal:cn、I18n.locale;'を試してみて、同じエラーメッセージで失敗します。 –

+0

okと 'I18n.default_locale =:cn; assert_equal:cn、I18n.default_locale;'? – apneadiving

答えて

1

あなたのコードは、機能テストケースと同じように正確に挿入され、新しいRails 3.0.9アプリケーションで完全に動作します。 getまたはコントローラをテストするために何かは、アプリケーションのコンテキスト(テストのコンテキストでのみロケール)でロケールを設定するつもりはないを呼び出す前に、機能テスト中にI18n.localeでロケールを設定し、言われたこと

通常、要求に応じてロケールを設定するには、{ :locale => :cn }のようなものをパラメータにマージする必要があります。これはあなたが表示している実際のテストには影響しませんが、何が失敗しているかを正確には示していない可能性があります。

+0

あなたの答えをありがとう。 UNITテストではなく、機能テストに取り組んでいます。あなたは私が最初からこれを明確にしなければならないということは正しい。したがって、私のケースではUNITテストでは機能しません。なぜあなたは何か手がかりがありますか?あなたは複製できますか?ところで、私はRails 3.0.7を使用しています。 –

+0

あなたはあなたの**コントローラ**のためのテストを書いていると言っています。これはユニットテストではありません。いずれにしても、3.0.7アプリユニットテストの同じコードもうまく動作します。 – smathy

+0

(私はコントローラのテストについては間違っていると言った)。私はブランドの新しいアプリケーションを開始し、単一のモデルを作成しました。その後、テストされ、それは動作します。あなたは新しいアプリケーションでうまく動作するのは間違いありません。したがって、私が持っている既存のアプリケーションではうまくいかない理由を見つけなければなりません。 –

関連する問題