Usando simulação para corrigir uma tarefa de aipo nos testes unitários do Django

Eu estou tentando usar a biblioteca de simulação de Python para corrigir uma tarefa de aipo que é executada quando um modelo é salvo no meu aplicativo django, para ver que está sendo chamado corretamente.

Basicamente, a tarefa é definida dentromyapp.tasks, e é importado no topo do meu arquivo models.py assim:

from .tasks import mytask

... e, em seguida, é executado emsave() dentro do modelo usandomytask.delay(foo, bar). Até aí tudo bem - funciona bem quando estou realmente correndo Celeryd etc.

Eu quero construir um teste de unidade que zomba da tarefa, apenas para verificar se ele é chamado com os argumentos corretos e realmente não tenta executar a tarefa de aipo nunca.

Então, no arquivo de teste, eu tenho algo parecido com isso dentro de um TestCase padrão:

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)

... mas nunca é chamado / é sempre falso. Eu tentei várias encarnações (remendandomyapp.models.mytask em vez disso, e verificar semock_task.delay foi chamado em vez disso. Eu juntei dos documentos simulados que o caminho de importação é crucial, e googling me diz que este deve ser o caminho como é visto dentro do módulo em testes (o que seriamyapp.models.mytask.delay ao invés demyapp.tasks.mytask.delay, se eu entendi corretamente).

Onde estou indo errado aqui? Existe alguma dificuldade específica em consertar as tarefas do Aipo? Eu poderia corrigircelery.task (que é usado como decorador paramytask) em vez de?

questionAnswers(2)

yourAnswerToTheQuestion