python - 单元测试 Flask Babel 翻译

标签 python unit-testing flask python-babel flask-babel

我想做一些单元测试来检查我的 Flask 应用程序翻译。我试过这段代码:

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)

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

最佳答案

您显示的代码似乎对我有用。请根据您的描述在此处查看完整示例:https://github.com/loomchild/flask_babel_test .当我运行 ./flask_babel_test_test.py 时,两个测试都通过了。

您能否提供完整的源代码以重现问题?

目前我可以想象以下解决方案(它们都出现在上面链接的示例代码的注释掉的部分):

  1. 涉及一些缓存 - 在测试期间更新默认语言环境后尝试执行 flask.ext.babel.refresh() 并查看它是否有帮助。

  2. 如果您使用 localeselector 从 Accept-Language HTTP header 自动检索浏览器语言,例如:

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

    然后在测试期间不要修改应用程序配置,而是指定一个 header :

    rv = app.test_client().get('/', headers=[("Accept-Language", "pt_BR")])
    
  3. Flask-Babel 在测试期间找不到translations 目录。它在 app["BABEL_TRANSLATION_DIRECTORIES"] 配置设置中查找它们(默认为 translations)。路径可以是相对于 app.root_path 的绝对路径或相对路径(如果您不确定它指向何处,请在测试中打印此变量)。您可以指定多个路径,以 ; 分隔。

关于python - 单元测试 Flask Babel 翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28665242/

相关文章:

javascript - 如何在 Chai 的单元测试中使用 localStorage

python - 带参数的 GET 请求 FlasK/Rest API

c# - 读取一个非常大的单行 txt 文件并将其拆分

python - 找不到-lpython2 : MatCaffe installation error

python-3.x - 使用 unittest.mock 在 Python 中模拟 os.remove

java - 任何(MyClass.class)实际上只匹配传递类类型的类?

flask - 如何使用默认文件创建 WTForms FileField?

python - 在 Pycharm 中导入 PyMongo 失败

如果放入命名空间包中,则子模块的python导入路径

python - 如何在 pandas 的特定位置添加列?