Ответ 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. Там есть несколько полезных примеров.