from contextlib import asynccontextmanager from unittest.mock import Mock, patch import pytest from fastapi import FastAPI # Предполагаем, что тестируемый модуль называется `myapp` # Импортируем из него нужные объекты from app.main import app_factory, lifespan, main @pytest.mark.asyncio async def test_lifespan() -> None: """Проверяет, что lifespan является корректным асинхронным контекстным менеджером.""" app = FastAPI() # Проверяем, что lifespan - это asynccontextmanager assert isinstance(lifespan, asynccontextmanager(lifespan).__class__) # type: ignore[arg-type] # Проверяем, что контекстный менеджер работает (ничего не ломается) async with lifespan(app): pass # Просто убеждаемся, что yield отрабатывает def test_app_factory() -> None: """Проверяет, что app_factory создаёт приложение FastAPI с переданным lifespan.""" app = app_factory() assert isinstance(app, FastAPI) # Проверяем, что lifespan приложения установлен на функцию lifespan assert app.router.lifespan_context == lifespan @patch("app.main.uvicorn.run") def test_main(mock_uvicorn_run: Mock) -> None: """Проверяет, что main вызывает uvicorn.run с правильными параметрами.""" main() mock_uvicorn_run.assert_called_once_with( app_factory, factory=True, host="0.0.0.0", port=8000, # Предполагаемый порт (в коде обрезано, но обычно 8000) )