Перемешивание контекстного менеджера ClientSession aiohttp с использованием asynctest - PullRequest
1 голос
/ 17 октября 2019

У меня есть следующая асинхронная функция:

async def my_func(request):
    # preparation code here
    with aiohttp.ClientSession() as s:
        with s.post(url, headers) as response:
            status_code = response.status
            if status_code == 200:
                json_resp = await response.json()
            elif:
                # more checks

Пытаюсь проверить это, но до сих пор не нашел пути.

from asynctest.mock import CoroutineMock, MagicMock as AsyncMagicMock

@mock.patch("path_to_function.aiohttp.ClientSession", new_callable=AsyncMagicMock) # this is unittest.mock
def test_async_function(self, mocked_session):
    s = AsyncMagicMock()
    mocked_client_session().__aenter__ = CoroutineMock(side_effect=s)
        session_post = s.post()
        response_mock = AsyncMagicMock()
        session_post.__aenter__ = CoroutineMock(side_effect=response_mock)
        response_mock.status = 200

но не работает, как я хочу. Буду очень признателен за помощь в тестировании менеджеров контекста.

1 Ответ

0 голосов
/ 17 октября 2019

Глупый я, нашел решение. Я использовал side_effect вместо return_value. Работает как шарм. Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...