首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastAPI依赖覆盖失败

FastAPI依赖覆盖失败
EN

Stack Overflow用户
提问于 2022-04-18 02:37:33
回答 1查看 307关注 0票数 0

我正在使用MongoMock测试我的FastAPI应用程序,但是我可以“覆盖FastAPI的依赖性”。

create_test_data将使用MongoMock的客户端插入一些假测试数据,并返回task_id请求所需的测试数据。

代码语言:javascript
复制
from mongomock import MongoClient
from fastapi.testclient import TestClient
from pytest import fixture
from app import app
from core.utils.db_utils import get_db
from models.tasks import TaskCreate
from models.frequency import Frequency


@fixture(name="conn")
def conn_fixture():
    with MongoClient() as conn:
        yield conn


@fixture(name="client")
def client_fixture(conn: MongoClient):
    def get_conn_override():
        return conn

    app.dependency_overrides[get_db] = get_conn_override

    client = TestClient(app)
    yield client
    app.dependency_overrides.clear()


def test_wrong_api_log(conn: MongoClient, client: TestClient):
    task_id = create_test_data(conn=conn, platform="test")
    assert task_id
    
    response = client.get(url=f"/api/tasks/{task_id}")
    assert response.text

在"test_wrong_api_log“函数中,带有task_id的第一个断言可以传递,但是第二个断言不能传递,看起来就像重写FastAPI的依赖失败原因一样。

下面的代码是get_dbconnect_to_mongo将返回pymongo的MongoClient而不是MongoMock的MongoClient。

代码语言:javascript
复制
from db.mongodb_utils import connect_to_mongo


def get_db():
    db_client = connect_to_mongo()
    try:
        yield db_client
    finally:
        db_client.close()

有解决这个问题的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-18 02:54:25

你从来没有打电话给你的client_fixture。此外,您的conn也应该调用您的夹具。

尝尝这个

代码语言:javascript
复制
def test_wrong_api_log(conn_fixture: MongoClient, client_fixture: TestClient):
    task_id = create_test_data(conn=conn_fixture, platform="test")
    assert task_id
    
    response = client_fixture.get(url=f"/api/tasks/{task_id}")
    assert response.text
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71907063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档