我正在使用MongoMock测试我的FastAPI应用程序,但是我可以“覆盖FastAPI的依赖性”。
create_test_data将使用MongoMock的客户端插入一些假测试数据,并返回task_id请求所需的测试数据。
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_db,connect_to_mongo将返回pymongo的MongoClient而不是MongoMock的MongoClient。
from db.mongodb_utils import connect_to_mongo
def get_db():
db_client = connect_to_mongo()
try:
yield db_client
finally:
db_client.close()有解决这个问题的办法吗?
发布于 2022-04-18 02:54:25
你从来没有打电话给你的client_fixture。此外,您的conn也应该调用您的夹具。
尝尝这个
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.texthttps://stackoverflow.com/questions/71907063
复制相似问题