אני מסתכל באוסף המרשים של ה client fixtures שיש לנו בקוד ואני תוהה על מהותם. אני מבין שהרוב פשוט העתיקו מה שהם ראו שאחרים עשו, אבל אולי המישהו המקורי יכול להסביר למה כל ראוט צריך אחד משלו?
חלק מהקוד:
def create_test_client(get_db_function) -> Generator[Session, None, None]:
Base.metadata.create_all(bind=test_engine)
main.app.dependency_overrides[get_db_function] = get_test_db
with TestClient(main.app) as client:
yield client
main.app.dependency_overrides = {}
Base.metadata.drop_all(bind=test_engine)
@pytest.fixture(scope="session")
def agenda_test_client() -> Generator[TestClient, None, None]:
yield from create_test_client(agenda.get_db)
@pytest.fixture(scope="session")
def friendview_test_client() -> Generator[TestClient, None, None]:
yield from create_test_client(friendview.get_db)
@pytest.fixture(scope="session")
def weight_test_client() -> Generator[TestClient, None, None]:
yield from create_test_client(weight.get_db)
@pytest.fixture(scope="session")
def event_test_client() -> Generator[TestClient, None, None]:
yield from create_test_client(event.get_db)
ממבט על הקוד, אפשר לראות שכל הפיקצ’ר-לראוט מעבירים את ה get_db מהמודול שלהם. בלי יוצא מן הכלל, אצל כולם זה
def get_db() -> Session:
db = SessionLocal()
try:
yield db
finally:
db.close()
שנמצא ב app/dependencies.py. אז מה המטרה פה בעצם?