Подражать django.core.mail.send_mail в другой функции
Я хочу поиздеваться над send_mail() django так, чтобы он выбрасывал исключение. Мой подход выглядит так, как показано ниже, но письма все еще отправляются, и никаких исключений не возникает. Это работает, если я вызываю send_mail() непосредственно в менеджере контекста, но не работает, если я вызываю функцию, которая импортирует, а затем использует send_mail()
# test.py
import handle_alerts
from unittest import mock
class MailTest(TestCase):
def test_handle_alerts(self):
with mock.patch("django.core.mail.send_mail") as mocked_mail:
mocked_mail.side_effect = Exception("OH NOES")
handle_alerts() # ends up using send_mail
# handle_alerts.py
from django.core.mail import send_mail
def handle_alerts():
send_mail(....) # valid call goes here
Вы должны высмеивать использование функции, а не ее объявление.
class MailTest(TestCase):
def test_handle_alerts(self):
with mock.patch("handle_alerts.send_mail") as mocked_mail:
mocked_mail.side_effect = Exception("OH NOES")
handle_alerts()