Hou*_*man 15 unit-testing sqlalchemy fastapi
我在 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
Run Code Online (Sandbox Code Playgroud)
AttributeError:“生成器”对象没有属性“查询”
在我的测试类中,我应用了所有覆盖:
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
Run Code Online (Sandbox Code Playgroud)
我认为get_db().query(Device).get("a1")这不是正确的方法。但我很困惑,文档没有涵盖这种情况。
Dan*_*fee 21
当您收到错误时,AttributeError: 'generator' object has no attribute 'query'python 会告诉您,结果get_db()不是 sqlalchemy 会话对象,而是生成会话对象的生成器。
尝试调用next()您的生成器以从生成器中获取会话。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7926 次 |
| 最近记录: |