¿Cómo pruebas un endpoint de FastAPI sin llamar a la base de datos real?
Opciones
- No se puede sin arrancar una base de datos real
TestClientmás un fake endependency_overrides[get_db](Opción correcta)- Haciendo patch de
fastapi.FastAPIen la preparación del test - Arrancando el servidor y llamándolo con curl en los tests
Respuesta
Usa TestClient(app) y reemplaza la dependencia de base de datos con app.dependency_overrides[get_db] = fake_db
Por qué
TestClient envía peticiones a tu app en memoria, sin arrancar un servidor real.
Como FastAPI usa dependency injection, puedes cambiar cualquier dependencia en el test: app.dependency_overrides[get_db] = lambda: fake_db.
Recuerda limpiar los overrides tras cada test (una fixture es un buen sitio).
client = TestClient(app)
app.dependency_overrides[get_db] = lambda: FakeDB()
def test_read_user():
r = client.get("/users/1")
assert r.status_code == 200Recuerda
Tests de FastAPI: TestClient + dependency_overrides.