[英]Disabling @login_required while unit-testing flask with flask-login
我正在测试我的烧瓶应用程序,它使用flask-login扩展。
我正在使用webtest设置所有我的测试:
class TestCase(unittest.TestCase):
def setUp(self):
app.config['TESTING'] = True
self.client = webtest.TestApp(app)
但是当我尝试通过使用@login_required修饰的self.client.get()访问URL时,我收到401错误,并显示一条消息,表示我无权访问该URL。
根据文档https://flask-login.readthedocs.org/en/latest/#protecting-views和本讨论 ,将'TESTING'的配置值设置为True应该禁用登录要求,但这似乎不是为我工作
有什么建议?
这是因为Flask-Login
缓存TESTING
或LOGIN_DISABLED
上init_app
( https://github.com/maxcountryman/flask-login/blob/master/flask_login.py#L164 )。
因此,如果您创建应用程序然后在配置中设置某些内容,那么您将忽略配置更改。
更好的方法是将应用程序工厂与分离的配置一起用于生产和测试,它还可以降低测试中未清除应用程序状态的概率获取错误。
login_manager
最简单的方法:
class TestCase(unittest.TestCase):
def setUp(self):
app.config['TESTING'] = True
app.login_manager.init_app(app)
self.client = webtest.TestApp(app)
来自flask登录文档,它说:
在单元测试时全局关闭认证可能很方便。 要启用此功能,如果应用程序配置变量LOGIN_DISABLED设置为True,则将忽略此装饰器。
如果您正在使用应用程序工厂设计模式,请将此添加到您的测试配置
LOGIN_DISABLED = True
或者您可以在创建应用程序时添加它,如下所示:
class TestCase(unittest.TestCase):
def setUp(self):
app.config['LOGIN_DISABLED'] = True
self.client = webtest.TestApp(app)
希望这将有助于其他将遇到同样问题的人
我不确定这是否会有所帮助,但是:
在我的旧flaskr项目文件中,我在“flaskr.py”文件中有配置,它们看起来像这样:
# configuration
DATABASE = 'flaskr.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'
所以也许你会
TESTING = True
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.