Ответ aiohttp Mock ClientSession

Попытка имитировать ответ aiohttp.ClientSession для целей тестирования

Мой код выглядит так:

async def run_request(endpoint: str, **kwargs) -> dict:
    async with aiohttp.ClientSession() as session:
        async with session.post(endpoint, **kwargs) as response:
            response_json = await response.json()

            return {"response": response, "response_json": response_json}

Я хотел бы протестировать свой код с чем-то, что, как мне кажется, выглядит так:

@patch("aiohttp.ClientSession.post", <something>)
def test_run_request(self):

Как я могу это сделать?

1 ответ

Есть много разных решений для этой проблемы, я думаю, что самый простой способ - использовать aioresponses lib. ( https://github.com/pnuckowski/aioresponses)

Но это будет работать правильно, только если вы используете ТОЛЬКО ClientSession без aiohttp.web.Application. Если вы используете CS как часть aiohttp.web.Application, вы сломаете приложение test_client (pytest-aiohttp).

Также см. Этот вопрос Как издеваться над aiohttp.client.ClientSession.get async context manager. Там есть несколько полезных примеров.

Другие вопросы по тегам