Ich erstelle eine Fastapi -Anwendung mit dem Repository -Muster mit Beanie ODM für MongoDB. Ich versuche, Tests mit PyTest-Asyncio einzurichten, aber ich stieß auf eine Beanie.exceptions.Collectionwasnotinitialized Fehler beim Ausführen meiner Tests.
Hier ist meine Projektstruktur : < /p>
app.include_router(attribute.router) < /code> Datenbankinitialisierung (Initialisierung (lib/db_initializer.py[/code]): [code]# imports are omitted
async def init_db(mongo_uri:str, db_name:str): client = AsyncIOMotorClient(mongo_uri) db = client[db_name] await init_beanie(database=db, document_models=get_beanie_models()) < /code> Test -Setup in ((tests/conftest.py[/code]): [code]# some imports are omitted
from product_catalouge.core.config import settings from product_catalouge.lib.models_loader import get_beanie_models from product_catalouge.lib.db_initializer import init_db from product_catalouge.web.api.routers import attribute
routers = [attribute]
@pytest_asyncio.fixture(autouse=True) async def testdb(): db_client = AsyncIOMotorClient(settings.db_uri) try: await db_client.server_info() print("[TEST DB CONNECTION] MongoDB connection successful.") except Exception as e: print(f"[TEST DB CONNECTION] MongoDB connection failed: {e}") raise await init_beanie(database=db_client.get_database(name=settings.test_db_name), document_models=get_beanie_models()) print("[TEST DB INITIALIZATION] Beanie initialization complete.") yield db_client await db_client.drop_database(settings.test_db_name) print("[TEST DB TEARDOWN] Test database dropped.")
@pytest.fixture(autouse=True) def test_app(test_lifespan): app_ = FastAPI( title="Product Catalogue Service (Test)", docs_url="/api/docs", openapi_url="/api/openapi", lifespan=test_lifespan, ) for router in routers: app_.include_router(router.router) return app_ < /code> Testleuchten in ((tests/test_attributes/conftest.py[/code]): [code]# some imports are omitted from product_catalouge.models.attribute import AttributeModel
@pytest_asyncio.fixture() async def three_attrs(testdb, attrs): inserted_attrs = [] for attr in attrs: inserted_attr = await AttributeModel(**attr).insert() inserted_attrs.append(inserted_attr) yield inserted_attrs < /code> Wenn ich diesen Test ausführe: < /p> async def test_get_all_attrs(testdb, three_attrs, test_app): async with AsyncClient(transport=ASGITransport(test_app), base_url="http://test", follow_redirects=True) as ac: res = await ac.get("/api/attributes") assert res.status_code == 200 assert len(res.json()) == 3 < /code> Ich erhalte den Fehler: beanie.exceptions.collectionwasnotinitialized < /code> funktioniert sowohl gut als auch andere Tests. Ich richte die Testdatenbank ein oder verwalte den asynchronen Kontext, aber ich bin mir nicht sicher, was ich falsch mache. Beanie odm? Als ich beanie.exceptions.collectionwasnotinitialized [/code] Fehler bekam, war ich zwar aufgrund mangelnder Funktionalität in mongomock_motor. P>
Ich habe Code, der Twisted verwendet, also habe ich eine Testfunktion dafür geschrieben und ihn mit @pyTest_twisted.EnsuredEferred dekoriert. Die Funktion wartet auf einige Aufschiebungen. Dann muss...
Ich verwende Asyncio und Aiohttp in einer Anwendung, die ich erstelle, und kann anscheinend nicht herausfinden, wie ich Pytest gut zum Laufen bringen kann. Wenn ich Pytest verwende, erhalte ich immer...
Ich habe eine Testsuite in cypress.js, in der ich vor jedem Test eine bestimmte Datenbank aus indexedDB lösche:
beforeEach(() => {
cy.window().then(win => win.indexedDB.deleteDatabase('test_db'));...