Использование mock для исправления задачи сельдерея в модульных тестах Django

Я пытаюсь использовать библиотеку python mock для исправления задачи Celery, которая запускается при сохранении модели в моем приложении django, чтобы убедиться, что она вызывается правильно.

В основном, задача определяется внутриmyapp.tasksи импортируется в начало моего файла models.py следующим образом:

from .tasks import mytask

... а затем работаетsave() внутри модели с помощьюmytask.delay(foo, bar), Пока все хорошо - отлично работает, когда я на самом деле использую Celeryd и т. Д.

Я хочу создать модульный тест, который проверяет задачу, просто чтобы убедиться, что она вызывается с правильными аргументами и фактически не пытается запустить задачу Celery.

Итак, в тестовом файле у меня есть что-то вроде этого внутри стандартного TestCase:

from mock import patch # at the top of the file

# ...then later
def test_celery_task(self):
    with patch('myapp.models.mytask.delay') as mock_task:
        # ...create an instance of the model and save it etc
        self.assertTrue(mock_task.called)

... но это никогда не вызывается / всегда ложно. Я пробовал различные воплощения (исправленияmyapp.models.mytask вместо этого, и проверка, еслиmock_task.delay был назван вместо Я собрал из ложных документов, что путь импорта имеет решающее значение, и поиск в Google говорит мне, что это должен быть путь, как он виден внутри тестируемого модуля (который будетmyapp.models.mytask.delay скорее, чемmyapp.tasks.mytask.delayесли я правильно понимаю).

Куда я здесь не так? Есть ли какие-то особые трудности в исправлении задач Celery? Могу ли я исправитьcelery.task (который используется в качестве декоратора дляmytask) вместо?

Ответы на вопрос(2)

Ваш ответ на вопрос