Похожие чаты

Я же правильно понимаю, что при желании написать тесты на

роутеры в FastAPI имея что-то типа

@pytest.fixture(scope="function")
async def db_session(new_session_maker) -> AsyncSession:
async with create_async_engine(settings.db_connection_string_test).connect() as connect:
async_session = new_session_maker(bind=connect)
transaction = await connect.begin()
await connect.begin_nested()

@event.listens_for(async_session.sync_session, "after_transaction_end")
def reopen_nested_transaction(session, transaction):
if connect.closed:
return

if not connect.in_nested_transaction():
connect.sync_connection.begin_nested()

yield async_session
await transaction.rollback()
if transaction.is_active:
await transaction.rollback()

И внутри теста

async def test_my_test(client, db_session):
expected_ouput = [...]

db_session.add(MyModel(expected_ouput))

response = await client.get("/se/api/my-path")
assert response.status_code == 200
assert response.json() == expected_ouput

Концептуально - это правильное направление? Пока запрос не видит данные из db_session_add(...) 😞

P.S. у меня одна и та же фикстура для фабрики сессий, где после я переопределяю сессию для клиента

7 ответов

29 просмотров

Так а объекты, которые ты добавил в сессию коммитить кто будет?

I.-K. Автор вопроса
Alex
Так а объекты, которые ты добавил в сессию коммити...

Сразу после db_session.add(...) Добавить await db_session.commit()? Выглядит вполне разумно, но пока тоже не даёт результатов

I.-K. Автор вопроса
Alex
client это у нас вообще что?

@pytest.fixture() async def client(new_session_maker) -> AsyncGenerator[AsyncClient, None]: async def override_get_session(): async with new_session_maker() as s: yield s app.dependency_overrides[get_session] = override_get_session async def mock_normal_user(request: Request): user = { "claims": {"preferred_username": "NormalUser"}, "roles": ["role1"], "aud": "aud", "tid": "tid", "access_token": "123", } request.state.user = user return user app.dependency_overrides[azure_scheme] = mock_normal_user async with AsyncClient(app=app, base_url="http://test") as ac: yield ac

I. K.
@pytest.fixture() async def client(new_session_mak...

Ну выглядит вроде нормально

I. K.
@pytest.fixture() async def client(new_session_mak...

Только не совсем вижу где связь между db_session фикстурой и вот этой фикстурой клиента.

I.-K. Автор вопроса
Alex
Только не совсем вижу где связь между db_session ф...

Всё, да, это было очень логично, большое спасибо. Оно заработало 😊

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
For all those that keep asking why no pump? why this ? and why that...? Please close ur ewt chart and open 2 others - TOTAL (total mc) and BTC.D (btc dominance). Maybe BTC a...
Inn3r_G
19
"Since pnut can flip FTM easily, I'm swapping my FTM to pnut and hoping for a easy x5-x10" Perfect recipe for disaster. NFA but chances are, you'll end up as exit liquidity ...
C. A.
7
AMD status update? No longer in the plan but something might be around the corner later on Chinese partner? No longer in the plan. This market does not seem to be the top ...
Ben
6
I get confused when people talk about the ‘bull market’ and the ‘next bull market’ as if anyone really has a clue what’s really going on in the world. First of all - there i...
Shah
1
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Мне вот любопытно. Уже сколько времени имею соблазн купить макбук, ибо подозреваю что очень уж удобен будет в связке с другой техникой от эпл которая у меня есть, да и сам по ...
Not Yeromin
9
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
Добрый день, подскажите, пожалуйста, по проблеме. Сегодня на работе утром обнаружилось что по рдп подключиться не получается к серверу 2022. В серверную зашел - на системно...
srv
19
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта