import pytest import discord from discord.ext import commands from unittest.mock import AsyncMock, MagicMock # Import your bot instance and commands module from my_bot import bot @pytest.fixture def bot_instance(): # Setup a test bot instance bot = commands.Bot(command_prefix="!") # Mock bot's guild and channel guild = MagicMock() guild.id = 1234567890 channel = MagicMock() channel.id = 9876543210 channel.guild = guild channel.send = AsyncMock() # Mock send method bot.add_guild(guild) bot.add_cog(MyCog(bot)) # Example of adding a cog return bot, channel @pytest.mark.asyncio async def test_hello_command(bot_instance): bot, channel = bot_instance # Simulate sending a message message = MagicMock() message.content = "!hello" message.channel = channel message.author = MagicMock() message.author.bot = False # Ensure the author is not a bot # Dispatch the message to trigger the command await bot.process_commands(message) # Check if the bot sent a response channel.send.assert_called_once_with("Hello, World!") @pytest.mark.asyncio async def test_on_member_join(bot_instance): bot, channel = bot_instance # Simulate a member joining member = MagicMock() member.guild = channel.guild await bot.on_member_join(member) # Check if the bot welcomed the new member channel.send.assert_called_once_with(f"Welcome {member.mention} to {channel.guild.name}!")