Похожие чаты

Сейчас БД алхими для FastAPI подменяется примерно так (Через dependency_override).

Но возникла потребность заменить не только в том случае когда она используется в Depends, а так же и напрямую. Как будет корректно подменить БД на другую?

6 ответов

21 просмотр

https://www.core27.co/post/transactional-unit-tests-with-pytest-and-async-sqlalchemy

У тебя ещё сессия неправильно используется, тебе надо её открывать в скопе функции и там оверрайдить

Артём-Кутузов Автор вопроса
Yegor 𓃰
У тебя ещё сессия неправильно используется, тебе н...

Зачем в тестовой функции оверрайдить? Это ж куча повторяющегося когда

Я вот так вот писал, движок, приложение и фабрика сессий создаются со скоупом сессии тоже в фикстурах @asynccontextmanager async def test_session(session_factory, engine): # noqa connection = await engine.connect() trans = await connection.begin() async_session = session_factory(bind=connection) nested = await connection.begin_nested() @event.listens_for(async_session.sync_session, "after_transaction_end") def end_savepoint(session, transaction): nonlocal nested if not nested.is_active: nested = connection.sync_connection.begin_nested() yield async_session await trans.rollback() await async_session.close() await connection.close() @pytest_asyncio.fixture(scope="function") async def session( session_factory, engine, app, ) -> AsyncGenerator[AsyncSession, None]: """Get session and aquire after completion.""" async with test_session(session_factory, engine) as session: async def get_test_async_session(): yield session # runtime session sync for server and client app.dependency_overrides[get_session] = get_test_async_session yield session

Yegor 𓃰
Я вот так вот писал, движок, приложение и фабрика ...

Вот тут сессия в рантайме меняется чтоб можно было в кейсе её переиспользовать на одном уровне изоляции

Не проще ли подменить параметры подключения к БД на другие? Я сам пользуюсь оверайдом т.к. для тестирования функция session всегда в конце ролбек и клоусе делает. И в целом Я данные тестовые в сессию загоняю, и эту же сессию использую для теста методов репозитория. Т.е. методы гет, берут данные из сессии. По сути, коннекта к БД и не требуется.

Похожие вопросы

Обсуждают сегодня

Ready for some fun AND a chance to win TKO Tokens? Join us for exciting minigames in our Telegram group! 🕒 Don’t miss out—games start on today 25 October 2024, at 8 PM! Ge...
Milkyway | Tokocrypto
255
Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
VIP-392 [zkSync] New native USDC market in the Core pool Summary If passed, following the Community proposal “Support native USDC on Venus Core Pool of ZKSync Era” and the a...
Venus Announcements
1
is that okay?
Samurai 🇯🇵
21
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
How about the project bro Likes the community not that active ?
🅿️abby_FX
19
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
Guys, Donald Trump or Kamala Harris? It does not matter for Bitcoin in the long run!! 2020 Election: After Joe Biden's victory in November 2020, Bitcoin steadily rose from...
Sabah Shabu
3
как быть с принтером? такой подход прокатит?
zamtmn
12
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Карта сайта