微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flask 单元测试和 Flask 安全性也有问题

如何解决Flask 单元测试和 Flask 安全性也有问题

我也有带有烧瓶安全性的简单 Flask 应用程序和一些单元测试。

test.py

class usermodelCase(unittest.TestCase):
def setUp(self):
    self.app = create_app(TestConfig)
    self.app_context = self.app.app_context()
    self.app_context.push()
    db.create_all()

def tearDown(self):
    db.session.remove()
    db.drop_all()
    self.app_context.pop()

app/init.py

db = sqlAlchemy()
admin = Admin(name='abcd',template_mode='bootstrap4')
security = Security()  

def create_app(config_class=Configuration):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)
    fsqla.FsModels.set_db_info(db)

    from app.models import User,Role,Comment,Post

    user_datastore = sqlAlchemyUserDatastore(db,User,Role)
    security.init_app(app,user_datastore,register_form=ExtendedRegisterForm)
    ...
    return app

和一些测试。 任何测试都在工作,但如果我在第二个运行所有测试,我会出现错误

sqlalchemy.exc.InvalidRequestError:已经为此元数据实例定义了表“roles_users”。指定 'extend_existing=True' 以重新定义现有 Table 对象上的选项和列。

self.app = create_app(TestConfig)

但就我而言,我没有定义表“roles_users”,它是自动创建的,我的models.py 中没有定义“roles_users”

我如何运行所有测试以避免错误?请帮帮我

解决方法

这里的主要问题是您需要为每个测试创建一个新的数据库实例 - 因为在 create_app() 中您正在执行 db.init(app) - 这可能是事情失败的地方。

这可能也适用于您的安全和管理对象。

尽量不使用 create_app() 并在您的测试装置 Setup() 中执行等效操作

,

谢谢,jwag。感谢您的指导,经过深思熟虑后,我将其添加到 testclass 中。它帮助了

@classmethod
def setUpClass(cls) -> None:
    cls.app = create_app(TestConfig)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?