我正在对使用 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-Login
在 init_app
( https://github.com/maxcountryman/flask-login/blob/master/flask_login.py#L164 ) 上缓存了 TESTING
或 LOGIN_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/