4

フラスコアプリの翻訳を確認するためにいくつかの単体テストを行いたいと思います。私はこのコードを試しました:

def test_pt_br(self):
    with app.test_request_context():
        app.config['BABEL_DEFAULT_LOCALE'] = 'pt_BR'
        rv = app.test_client().get('/')
        assert 'Execute, melhore' in str(rv.data)

ただし、アプリは正常に動作しますが、動作/合格しません。私は何を間違っていますか?

4

1 に答える 1

5

あなたが示したコードは私にとってはうまくいくようです。説明に基づいた完全な例をご覧ください: https://github.com/loomchild/flask_babel_test。./flask_babel_test_test.py を実行すると、両方のテストに合格します。

問題を再現できる完全なソース コードを提供していただけますか?

現在、次の解決策を想像できます (どちらも、上記のコード例のコメントアウトされたセクションに存在します)。

  1. いくつかのキャッシュが関係しています - テスト中にデフォルトのロケールを更新した後、flask.ext.babel.refresh() を実行してみて、それが役立つかどうかを確認してください。

  2. たとえば次のように、localeselector を使用して Accept-Language HTTP ヘッダーからブラウザー言語を自動的に取得する場合:

    @babel.localeselector
    def get_locale():
        translations = [str(translation) for translation in babel.list_translations()]
        return request.accept_languages.best_match(translations)
    

    次に、テスト中にアプリの構成を変更する代わりに、ヘッダーを指定します。

    rv = app.test_client().get('/', headers=[("Accept-Language", "pt_BR")])
    
  3. Flask-Babel は、テスト中に translations ディレクトリを見つけることができません。テスト用の Python スクリプトまたは translations ディレクトリを移動してみて、役立つかどうかを確認してください。Flask-Babel でこのディレクトリの場所をカスタマイズする方法がわかりません。おそらく、シンボリック リンクを作成するか、プロジェクトのルート ディレクトリからテストを実行すると役立つでしょう。

于 2015-03-01T10:31:29.287 に答える