【问题标题】:Test SqlAlchemy session events with Flask and PyTest使用 Flask 和 PyTest 测试 SqlAlchemy 会话事件
【发布时间】:2020-05-27 23:33:27
【问题描述】:

我正在使用 SqlAlchemy before_flush 事件来验证对象,然后再将它们保存到数据库中,如下所示:

from models import db

@event.listens_for(db.session, 'before_flush')
def validateSomething(session, flush_context, instances):
    pass

我真的很想测试我在那里所做的事情。但是,在我的测试中——我正在使用 pytest——使用夹具为每个测试创建一个新会话。它类似于这个设置:http://alexmic.net/flask-sqlalchemy-pytest/ 一个函数范围的夹具在会话旁边创建一个事务,并在拆卸期间回滚/删除它们。

由于事件是在models.db 的(范围)会话上注册的,因此不会为测试中使用的会话事件触发。有没有办法解决这个问题,所以在测试期间会触发事件?

【问题讨论】:

    标签: python flask sqlalchemy pytest


    【解决方案1】:

    listens_for() 允许监听会话类的所有实例的事件,而不是监听会话实例。所以用SignallingSession 替换db.session 就可以了。

    【讨论】:

      【解决方案2】:

      我也有同样的问题。更换

      @event.listens_for(db.session, 'before_flush')

      from sqlalchemy.orm import Session
      @event.listens_for(Session, 'before_flush')
      

      帮我解决了这个问题

      【讨论】:

        猜你喜欢
        • 2016-02-24
        • 1970-01-01
        • 1970-01-01
        • 2018-02-08
        • 2018-06-08
        • 2019-02-08
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多