[英]FastAPI dependency override faild
我正在使用 MongoMock 來測試我的 FastAPI 應用程序,但我無法覆蓋 FastAPI 的依賴項。
create_test_data
將使用 MongoMock 的客戶端插入一些偽造的測試數據,並返回task_id
請求所需的 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”function 中,第一個帶有 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()
無論如何要解決這個問題?
你永遠不會打電話給你的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.text
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.