[英]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.