| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- """pytest fixtures"""
- import pytest
- from fastapi.testclient import TestClient
- from sqlalchemy import create_engine
- from sqlalchemy.orm import sessionmaker
- from sqlalchemy.pool import StaticPool
- from app.core.database import Base, get_db
- from app.main import app as fastapi_app
- from app.services.seed import seed_if_empty
- import app.models # noqa: F401 — register metadata
- @pytest.fixture()
- def db_session():
- """独立内存库会话,供种子与模型测试使用。"""
- engine = create_engine(
- "sqlite+pysqlite:///:memory:",
- connect_args={"check_same_thread": False},
- poolclass=StaticPool,
- )
- Base.metadata.create_all(bind=engine)
- TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
- session = TestingSessionLocal()
- try:
- yield session
- finally:
- session.close()
- Base.metadata.drop_all(bind=engine)
- engine.dispose()
- @pytest.fixture()
- def client():
- """已建表并种子的 TestClient(覆盖 get_db)。"""
- engine = create_engine(
- "sqlite+pysqlite:///:memory:",
- connect_args={"check_same_thread": False},
- poolclass=StaticPool,
- )
- Base.metadata.create_all(bind=engine)
- TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
- session = TestingSessionLocal()
- seed_if_empty(session)
- def _override_get_db():
- try:
- yield session
- finally:
- pass
- fastapi_app.dependency_overrides[get_db] = _override_get_db
- with TestClient(fastapi_app) as c:
- yield c
- fastapi_app.dependency_overrides.clear()
- session.close()
- Base.metadata.drop_all(bind=engine)
- engine.dispose()
|