gpt4 book ai didi

unit-testing - 如何从 Fast API 中的单元测试访问数据库?

转载 作者:行者123 更新时间:2023-12-04 03:41:19 27 4
gpt4 key购买 nike

在 Fast API 中进行单元测试时,我正在努力访问 SQLAlchemy。

def test_successful_register_ios():
response = client.post("/register/",headers={},json={})
assert response.status_code == 201
device = get_db().query(Device).get("a1")
assert device.expires_at == mydate

AttributeError: 'generator' object has no attribute 'query'


在我的测试类中,我正在应用所有覆盖:
from database.database import Base
from main import app, get_db

settings = Settings()
engine = create_engine(settings.sqlalchemy_database_uri)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base.metadata.create_all(bind=engine)
client = TestClient(app)

def override_get_db():
try:
db = TestingSessionLocal()
yield db
finally:
db.close()

app.dependency_overrides[get_db] = override_get_db
我不认为 get_db().query(Device).get("a1")是正确的方法。但是我很困惑,文档没有涵盖这种情况。

最佳答案

当您收到错误 AttributeError: 'generator' object has no attribute 'query' python告诉你get_db()的结果不是 sqlalchemy session 对象,而是生成 session 对象的生成器。
尝试调用next()在您的生成器上以从生成器中获取 session 。

def test_successful_register_ios():
response = client.post("/register/",headers={},json={})
assert response.status_code == 201
device = next(get_db()).query(Device).get("a1")
assert device.expires_at == mydate

关于unit-testing - 如何从 Fast API 中的单元测试访问数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65982681/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com