Я хочу использовать библиотеку python mock
для тестирования того, что приложение Django отправляет электронную почту.Python: Mock не работает внутри задачи celery
код тест:
# tests.py
from django.test import TestCase
class MyTestCase(TestCase):
@mock.patch('django.core.mail.mail_managers')
def test_canceled_wo_claiming(self, mocked_mail_managers):
client = Client()
client.get('/')
print(mocked_mail_managers.called)
mocked_mail_managers.assert_called_with('Hi, managers!', 'Message Body')
Первого пример - без задач
# views.py
from django.views.generic import View
from django.core.mail import mail_managers
class MyView(View):
def get(self, request):
mail_managers('Hi, managers!', 'Message Body')
return HttpResponse('Hello!')
Второго пример - с задачами
# views.py
from django.views.generic import View
from . import tasks
class MyView(View):
def get(self, request):
tasks.notify.apply_async()
return HttpResponse('Hello!')
# tasks.py
from celery import shared_task
from django.core.mail import mail_managers
@shared_task
def notify():
mail_managers('Hi, managers!', 'Message Body')
Первый пример работает нормальный, второй е xample failed, с исключением Not called
.
Мои настройки:
# Celery
BROKEN_URL = 'memory://'
BROKER_BACKEND = 'memory'
CELERY_ALWAYS_EAGER = True
CELERY_EAGER_PROPAGATES_EXCEPTIONS = True
TEST_RUNNER = 'djcelery.contrib.test_runner.CeleryTestSuiteRunner'
Можно ли выполнять такие интегрированный тест или единственный способ решить эту проблему раскола тест на два?