Похожие чаты

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

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

6 ответов

9 просмотров

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 всегда в конце ролбек и клоусе делает. И в целом Я данные тестовые в сессию загоняю, и эту же сессию использую для теста методов репозитория. Т.е. методы гет, берут данные из сессии. По сути, коннекта к БД и не требуется.

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Всем привет! Использую gitlab-ci. Настроил gitlab-agent для деплоя в куб. При деплое проекта в логах такая ошибка: Executing deploy plan failed to watch "ns:my-project/Ingress...
Konstantin Moiseev
4
Since this HBAR page is so sensitive to words and criticism, I'll have to put this more delicately. What's up with this? DBS, a Hedera GC member holding $647 million in ETH?...
Summit Seeker R
11
What do you think they are trying to do ?
Ronan Gill
15
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
I am honored to report that all the deliverables for the BCHFAQ Flipstarter Phase 1 have been completed. I appreciate the opportunity I've had to put all this together using t...
fixthetracking
15
VIP-317 XVS bridge between Arbitrum one and BNB Chain, Ethereum and opBNB Summary Following the community proposal [VRC] Deploy Venus Protocol on Arbitrum, and the associate...
Venus Announcements
1
Based on the forum post on XPRT on basechain, I would like to express a few thoughts. In general, I think the idea that Persistence is pursuing is good, but I'm really having ...
Martin Knox
6
Народ всем привет Подскажите, как включить самописные dll библиотеки в итоговую сборку Сейчас при запуске dev сервера локально формируется папка build, из которой запускается...
Андрей
4
Карта сайта