Модульное тестирование переводов Flask Babel

Я хотел бы выполнить несколько модульных тестов, чтобы проверить переводы моего фляжного приложения. Я пробовал этот фрагмент кода:

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)

Однако он не работает/не проходит, хотя приложение работает нормально. Что я делаю не так?


person andref    schedule 23.02.2015    source источник


Ответы (1)


Код, который вы показали, кажется, работает для меня. См. здесь полный пример на основе вашего описания: https://github.com/loomchild/flask_babel_test. Когда я запускаю ./flask_babel_test_test.py, оба теста проходят.

Не могли бы вы предоставить полный исходный код, позволяющий воспроизвести проблему?

В настоящее время я могу представить следующие решения (оба они присутствуют в закомментированных разделах в приведенном выше примере кода):

  1. Задействовано некоторое кэширование — попробуйте выполнить flask.ext.babel.refresh() после обновления локали по умолчанию во время теста и посмотрите, поможет ли это.

  2. Если вы автоматически получаете язык браузера из HTTP-заголовка Accept-Language с помощью селектора локали, например, так:

    @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 не может найти каталог переводов во время тестирования — попробуйте переместить тестовый скрипт Python или каталог переводов и посмотрите, поможет ли это. Я не знаю, как настроить расположение этого каталога в Flask-Babel, возможно, может помочь создание символической ссылки или запуск теста из корневого каталога проекта.

person loomchild    schedule 01.03.2015