Помогите написать тест на pytest

Есть модуль, для удобства работы (команда управления когами и запуск бота)

    from os import listdir, rename
    from disnake.ext.commands import Bot
    from .Logger import logger

    
    async def cog_list(fold: str = './cogs') -> list:
        cogs_list = []
        for _filename in listdir(fold):
            if _filename.endswith('.py'):
                cogs_list.append(_filename[:-3])
        return cogs_list
    
    
    async def work_with_cogs(what_do: str, bot: Bot, cog: str | list):
        if isinstance(cog, str):
            cog = cog.split()
        for _filename in cog:
            if what_do == "load":
                bot.load_extension(f'cogs.{_filename}')
                logger.info(f'Loaded cog {_filename}')
            elif what_do == 'unload':
                bot.unload_extension(f'cogs.{_filename}')
                logger.info(f'Cog {_filename} unloaded')
            elif what_do == 'reload':
                bot.reload_extension(f'cogs.{_filename}')
                logger.info(f'Cog {_filename} reloaded')
            elif what_do == 'disable':
                bot.unload_extension(f'cogs.{_filename}')
                logger.info(f'Cog {_filename} stopped and disabled')
            elif what_do == 'enable':
                rename(f'cogs/disabled/{_filename}.py', f'cogs/{_filename}.py')
                bot.load_extension(f'cogs.{_filename}')
                logger.info(f'Cog {_filename} started and enabled')

logger это просто красивая обертка для logging Для cog_list смог написать, для второй функции все никак.

Можно ткнуть на хорошие примеры на русском желательно


Ответы (1 шт):

Автор решения: drgnbrn

для моего кода я смог написать тест, вдруг кому пригодится

@pytest.mark.asyncio
@pytest.mark.parametrize("cog", ["cog1.py", "cog2"])
@pytest.mark.parametrize("what_do", ['load', 'unload', 'reload', 'disable', 'enable'])
async def test_work_with_cogs(what_do, cog):
    mock_logger = mock.MagicMock()
    with mock.patch('discord_bot.lib.CogsPrep.logger.info') as mocked_logger:
        mock_bot = mock.MagicMock(spec=Bot)
        with mock.patch('discord_bot.lib.CogsPrep.rename') as mock_rename:
            mock_rename.return_value = True
            result = await work_with_cogs(what_do, mock_bot, cog)
            assert len(mocked_logger.call_args_list) == 1, f"Not listed what_do {what_do}"
→ Ссылка