代码之家  ›  专栏  ›  技术社区  ›  Houman

如何在Fast API中通过单元测试访问数据库?

  •  1
  • Houman  · 技术社区  · 3 年前

    在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:“生成器”对象没有属性“查询”

    在我的测试课上,我应用了所有的覆盖:

    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") 这是正确的方法。但我被困住了,文件也没有包括这个案子。

    0 回复  |  直到 3 年前
        1
  •  4
  •   Dan Safee    3 年前

    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
    
    推荐文章