fastapi 中的 dependency_overrides 不起作用

发布于 2025-01-11 09:54:28 字数 1050 浏览 0 评论 0原文

我正在尝试为 Web 服务编写测试,并且我想在运行测试时为测试创建一个单独的数据库。这是我实现它的 pytest 固定装置,

@pytest.fixture(scope="session")
def db_engine():
    engine = create_engine(SQLALCHEMY_DATABASE_URL)
    if not database_exists:
        create_database(engine.url)

    Base.metadata.create_all(bind=engine)

    yield engine


@pytest.fixture(scope="function")
def db(db_engine):
    connection = db_engine.connect()
    connection.begin()
    db = Session(bind=connection)

    yield db

    db.rollback()
    connection.close()


@pytest.fixture(scope="function")
def client(db):
    app.dependency_overrides[get_db] = lambda: db

    with TestClient(app) as c:
        yield c

但是 app.dependecy_overrides[get_db] = lambda: db 不起作用,请求继续发送到主数据库而不是测试数据库。 我的终点之一

@router.get("/", response_model=List[RoomPayload])
def read(db: Session = Depends(get_db),
               user=Depends(manager)):

    q = db.query(Room).all()

    if not q:
        raise HTTPException(status_code=404, detail=f"Rooms not found")

    return q

I am trying to write test for web service and I want to create a separate database for tests when you run them. It is my pytest fixture for realise it

@pytest.fixture(scope="session")
def db_engine():
    engine = create_engine(SQLALCHEMY_DATABASE_URL)
    if not database_exists:
        create_database(engine.url)

    Base.metadata.create_all(bind=engine)

    yield engine


@pytest.fixture(scope="function")
def db(db_engine):
    connection = db_engine.connect()
    connection.begin()
    db = Session(bind=connection)

    yield db

    db.rollback()
    connection.close()


@pytest.fixture(scope="function")
def client(db):
    app.dependency_overrides[get_db] = lambda: db

    with TestClient(app) as c:
        yield c

But app.dependecy_overrides[get_db] = lambda: db didnt work and requests continue to be sent to the main database and not the test one.
One of my endpoints

@router.get("/", response_model=List[RoomPayload])
def read(db: Session = Depends(get_db),
               user=Depends(manager)):

    q = db.query(Room).all()

    if not q:
        raise HTTPException(status_code=404, detail=f"Rooms not found")

    return q

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文