Testing FastAPI ApplicationsLesson 5.2
How to override FastAPI dependencies in tests
app.dependency_overrides, test database, override get_db, override get_current_user, test isolation, restoring overrides, in-memory SQLite for tests
Overriding Dependencies in Tests
app.dependency_overrides is a dict that maps production dependencies to test replacements. It is the primary tool for isolating tests from real databases and auth systems.
Override get_db with an in-memory SQLite
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from fastapi.testclient import TestClient
from app.main import app
from app.dependencies import get_db
from app.database import Base
TEST_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(TEST_DATABASE_URL)
TestingSession = sessionmaker(bind=engine)
Base.metadata.create_all(bind=engine)
def override_get_db():
db = TestingSession()
try:
yield db
finally:
db.close()
app.dependency_overrides[get_db] = override_get_db
client = TestClient(app)
Override auth dependency
from app.dependencies import get_current_user
from app.schemas import User
def fake_user():
return User(id=1, email="test@test.com")
def test_protected_route():
app.dependency_overrides[get_current_user] = fake_user
response = client.get("/me")
assert response.status_code == 200
app.dependency_overrides.clear() # always clean up
Always clear overrides after a test or use a pytest fixture with teardown. Leaving overrides in place pollutes other tests.
