Похожие чаты

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

роутеры в 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 ответов

31 просмотр

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

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 ф...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
@Benzenoid can you tell me the easiest, and safest way to bu.y HEX now?
Živa Žena
20
This is a question from my wife who make a fortune with memes 😂😂 About the Migration and Tokens: 1. How will the old tokens be migrated to the new $LGCYX network? What is th...
🍿 °anton°
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
What is the Dex situation? Agora team started with the Pnetwork for their dex which helped them both with integration. It’s completed but as you can see from the Pnetwork ann...
Ben
1
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Anyone knows where there are some instructions or discort about failed bridge transactions ?
Jochem
21
@lozuk how do I get my phex copies of my ehex from a atomic wallet, to move to my rabby?
Justfrontin 👀
11
Карта сайта