Repaso
English
TestingIntermedioTST-19

¿Cómo pruebas un endpoint de FastAPI sin llamar a la base de datos real?

Opciones

  1. No se puede sin arrancar una base de datos real
  2. TestClient más un fake en dependency_overrides[get_db] (Opción correcta)
  3. Haciendo patch de fastapi.FastAPI en la preparación del test
  4. 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 == 200

Recuerda

Tests de FastAPI: TestClient + dependency_overrides.

Términos clave

Practica esta pregunta en Repaso