1 回答

TA貢獻1804條經驗 獲得超7個贊
不能同時與 sqlite 數據庫建立兩個連接。此外,您在這里有兩個連接,一個在會話夾具中顯式連接,您自己打開和關閉它,第二個隱含在夾具()中,可能關閉不會在這里發生。因此,請嘗試僅使用一次隱式連接,而不是 db 和進程夾具僅使進程夾具:db_db.session
@pytest.fixture
def session(app):
"""Creates a new database session for a test."""
db.app = app
db.create_all()
with db.engine.connect() as connection:
with connection.begin() as transaction:
options = dict(bind=connection, binds={})
session = db.create_scoped_session(options=options)
db.session = session
prepare_data(session)
yield session
transaction.rollback()
db.drop_all()
這里prepare_data是你的數據填充新數據庫:
def prepare_data(session):
permission = PermissionModel(title="can_search_articles")
role = RoleModel(title="API User", permissions=[permission])
tag = TagModel(name="Test tag")
article = ArticleModel(
title="Test article",
legal_language="en",
abstract="",
state="Alaska",
tags=[tag],
)
session.add_all([role, permission, tag, article])
session.commit()
user1 = UserModel(email="[email protected]", role_id=role.id)
user2 = UserModel(email="[email protected]")
session.add_all([user1, user2])
# Commit the changes for the users
session.commit()
因為這里的會話夾具是函數范圍的,所以在每個測試中,你都會有一個數據庫。更實用的是,不要每次都完全填滿數據庫,而是將此prepare_data拆分為幾個單獨的夾具,每個夾具用于一個對象,并在確切需要的地方使用它們。
添加回答
舉報