Похожие чаты

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

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

12 просмотров

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

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

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

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

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

А кто-то пробовал, уезжая из Эстонии получить э-рез и продолжить вести предпринимательскую деятельность внутри Эстонии, используя свой OÜ?
Lalalashechki Lalala
62
isn't utxo commitements pretty close though if someone wanted to get it over the finish line? my understanding is that most of the ground work was already down by verde
Luke High - Rabbi Of Bcash High Rabbi Of Bcash
23
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Чем оно проблема?
Nikita Uzumaki
21
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
is the buyback program live and at what prices are the purchases fixed? excuse me for the bland PA question, sophisticated defi people keke
Imnothere
16
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Hi, I was reading this https://twitter.com/HouseofChimera/status/1778078991762780408 about Verasity and their likely choice of Tron as blockchain for their token for its low f...
Jordi
13
@samkazemian - couple questions: Update on frxBTC? - This would do well with the current influx of institutional investment entering the space Update on future veFXS streams...
Costi
16
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Карта сайта