单元测试Flask Babel的翻译

时间:2015-02-23 00:31:51

标签: python unit-testing 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)

但是,尽管应用程序运行良好,但它无法正常工作。我做错了什么?

1 个答案:

答案 0 :(得分:4)

您展示的代码似乎对我有用。请根据您的说明在此处查看完整示例: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)
    

    然后,不要在测试期间修改app config,而是指定标题:

    rv = app.test_client().get('/', headers=[("Accept-Language", "pt_BR")])
    
  3. Flask-Babel在测试期间无法找到翻译目录 - 尝试移动测试Python脚本或翻译目录,看看它是否有帮助。我不知道如何在Flask-Babel中自定义这个目录的位置,也许从项目根目录创建符号链接或运行测试可以提供帮助。