-
-
Notifications
You must be signed in to change notification settings - Fork 4
Description
Describe the bug
When using dependency injection instead of passing the db dependency down through all the layers, a ContextVars is being used. Passing the db sessions via ContextVar over function parameters is working with no problems with the application and results in a cleaner solution.
However with testing, a context is setup in a fixture and is not being propagated to the underlying test, resulting in the underlying function not finding the required context and failing.
This issue is documented pytest-dev/pytest-asyncio#127 and a PR pytest-dev/pytest-asyncio#161
Expected behaviour
the test fixture should be propagating the ContextVar down to the test function so it available to the function under test
Screenshots
LookupError: <ContextVar name='db_session_context' at 0x1120f29a0>
tests/test_services/test_part_service.py:23: in test_part_get
item: PartModel = await part_service.create_part(obj_in) # noqa:
app/services/part_service.py:103: in create_part
db_session: AsyncSession = db_session_context.get()
E LookupError: <ContextVar name='db_session_context' at 0x1120f29a0>
--------------------------------- Captured Log ---------------------------------
--------------------------------- Captured Out ---------------------------------
--------------------------------- Captured Err ---------------------------------
INFO [alembic.env] DETECTED aiosqlite driver, stripping from DATABASE_URL for migration
INFO [alembic.env] Database URL: sqlite:///./tests/files/test.db
INFO [alembic.env] Running migrations online
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade -> 9905971ce75e, Adds Parts Table
INFO [alembic.env] DETECTED aiosqlite driver, stripping from DATABASE_URL for migration
INFO [alembic.env] Database URL: sqlite:///./tests/files/test.db
INFO [alembic.env] Running migrations online
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running downgrade 9905971ce75e -> , Adds Parts Table
Additional context
Should be resolved by this PR pytest-dev/pytest-asyncio#161