python - 让 Flask-Login 与 unittest 一起使用

标签 python flask python-unittest flask-login

我知道在测试中默认禁用登录。我试图通过将 app.config['LOGIN_DISABLED'] 设置为 False 来让它们重新打开。这似乎不起作用,因为 current_user 仍然返回 None,但会在测试文件外部的代码中返回 User。

下面是一些相关的代码。我的 Flask 应用程序对象最初是在我的应用程序的主 __init__.py 中创建的,该对象在测试期间导入并重新配置。

==========

init.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager

app = Flask(__name__)
app.config[u'DEBUG'] = settings.debug
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.init_app(app)

==========

测试/base.py

from my_app import app, db
import unittest

class BaseTest(unittest.TestCase):
  def setUp(self):
    app.config['TESTING'] = True
    app.config['LOGIN_DISABLED'] = False
    #app.login_manager._login_disabled = False #doesn't help either
    self.app = app.test_client()
    db.create_all()

==========

测试/test_a.py

from flask_login import current_user
from my_app.tests.base import BaseTest

class MyTests(BaseTest):
  def test_a(self):
    #visit endpoint that calls `login_user(user)`
    #printing `current_user` in that endpoint works, but the following line only returns `None`
    print current_user

注意:用户绝对应该在打印语句之前登录。在端点中使用 current_user 可以按预期工作。

最佳答案

事实证明,我的问题是由于测试时没有使用相同的上下文,因此我的解决方案与描述的类似 hereheretests/test_a.py 现在看起来像:

from flask_login import current_user
from my_app.tests.base import BaseTest

class MyTests(BaseTest):
  def test_a(self):
    with self.app:
      print current_user

奇怪的是,app.config['LOGIN_DISABLED'] = Falseapp.login_manager._login_disabled = False 在此更改后并不重要 - 两者都可以删除。

关于python - 让 Flask-Login 与 unittest 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52248925/

相关文章:

python - 从我的项目路径 django 下载 csv 文件

python - 如何在 Python 中逐字打印字符串

python - 一种在 setup() 中输出 pyunit 测试名称的方法

python - 是否可以测试使用 `os._exit()` 的函数?

python - 断言一个操作引发了一个 Stopiteration

python - Django:通过类似字典的接口(interface)访问表

python - 鼠兔的 "queue_declare"在通过设置 passive='None"查询时返回 "True",即使队列存在

python - 如何使用 Flask 将 GeoJSON 返回到 Openlayers

Flask 0.11 CLI 开发服务器——指定主机?

flask - 如何使用 Flask+uWSGI 设置自动重载?