簡體   English   中英

使用 Flask 和 PyTest 測試 SqlAlchemy 會話事件

[英]Test SqlAlchemy session events with Flask and PyTest

我正在使用 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的(范圍內的)會話上models.db ,它不會為測試中使用的會話的事件觸發。 有沒有辦法解決這個問題,以便在測試期間觸發事件?

listens_for()允許監聽會話類的所有實例的事件,而不是監聽會話實例。 所以用db.session替換db.session SignallingSession成功了。

我有同樣的問題。 更換

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

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

為我解決了這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM