python - 使用 flask 登录对 flask 进行单元测试时禁用@login_required

标签 python unit-testing flask webtest flask-login

我正在对使用 flask-login 扩展的 Flask 应用程序进行单元测试。

我正在使用 webtest 像这样设置我的所有测试:

class TestCase(unittest.TestCase):

    def setUp(self):
        app.config['TESTING'] = True
        self.client = webtest.TestApp(app)

但是当我尝试通过 self.client.get() 访问带有 @login_required 修饰的 url 时,我收到 401 错误消息,提示我无权访问该 url。

根据文档https://flask-login.readthedocs.org/en/latest/#protecting-views 还有这个discussion , 将“TESTING”的配置值设置为 True 应该会禁用登录要求,但这似乎对我不起作用。

有什么建议吗?

最佳答案

这是因为 Flask-Logininit_app ( https://github.com/maxcountryman/flask-login/blob/master/flask_login.py#L164 ) 上缓存了 TESTINGLOGIN_DISABLED

因此,如果您创建应用程序然后在配置中设置一些内容,那么您的配置更改将被忽略。

更好的方法是使用具有独立配置的应用程序工厂来进行生产和测试,它还可以降低在测试中未清理应用程序状态时出现错误的可能性。

重新初始化 login_manager 的最简单方法:

class TestCase(unittest.TestCase):
    def setUp(self):
        app.config['TESTING'] = True
        app.login_manager.init_app(app)
        self.client = webtest.TestApp(app)

关于python - 使用 flask 登录对 flask 进行单元测试时禁用@login_required,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21765210/

相关文章:

python - 使用 Flask 漂亮地显示 JSON 数据

python - Flask 如何知道要调用哪个装饰函数?

unit-testing - 如何在Spring集成中进行单元测试?

java - 如何验证多个 JUnit 4 测试的整体执行情况?

c# - 当前 JsonReader 项不是对象

python - 计算给定(x,y)坐标的多边形面积

python-3.x - 尝试将 Flask-socket 与 uwsgi 和 nginx 一起使用时经常出现 400 Bad Request 错误

python - 使用 pandas read_csv 检测导入 csv 文件的 header 分隔符

python TypeError 使用 timedelta 添加时间

python - 如何在Python中绘制条形图