Sto provando a utilizzare la libreria fittizia Python per correggere un task di Celery che viene eseguito quando un modello viene salvato nella mia app django, per verificare che venga chiamato correttamente.Utilizzo di simulazioni per correggere un'attività di sedano nei test di unità Django
In sostanza, il compito è definito all'interno myapp.tasks
, e viene importato in cima alla mia models.py file in questo modo:
from .tasks import mytask
... e poi gira su save()
all'interno del modello utilizzando mytask.delay(foo, bar)
. Fin qui tutto bene - funziona bene quando sto eseguendo Celeryd ecc.
Voglio costruire un test unitario che deride l'attività, solo per verificare che venga chiamato con gli argomenti corretti, e in realtà non lo fa prova a eseguire il compito di Celery in assoluto.
Quindi, nel file di test, ho qualcosa di simile all'interno di un TestCase norma:
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)
... ma non è mai viene chiamato/è sempre false. Ho provato varie versioni (patching myapp.models.mytask
, invece, e verificare se è stato chiamato mock_task.delay
. Ho raccolto dai documenti di simulazione che il percorso di importazione è cruciale e googling mi dice che dovrebbe essere il percorso così come è visto all'interno del modulo sotto test (che sarebbe myapp.models.mytask.delay
piuttosto che myapp.tasks.mytask.delay
, se ho capito bene).
Dove sto andando male qui? c'è qualche difficoltà specifiche in patch compiti di sedano? Potrei patchare celery.task
(che viene utilizzato come decoratore a mytask
) invece?
hai provato ad installare "CELERY_ALWAYS_EAGER = True", invece di deridere esso? – clsung