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="test@gmail.com", role_id=role.id)
user2 = UserModel(email="test2@gmail.com")
session.add_all([user1, user2])
# Commit the changes for the users
session.commit()
因为这里的会话夹具是函数范围的,所以在每个测试中,你都会有一个数据库。更实用的是,不要每次都完全填满数据库,而是将此prepare_data拆分为几个单独的夹具,每个夹具用于一个对象,并在确切需要的地方使用它们。
添加回答
举报