Помогите написать тест на 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}"