Ich versuche, die Python-Mock-Bibliothek zu Patch eine Sellerie Aufgabe, die ausgeführt wird, wenn ein Modell in meiner Django-App, um zu sehen, dass es richtig aufgerufen wird.Verwenden von Mock, um eine Sellerie Aufgabe in Django Komponententests zu patch
Grundsätzlich ist die Aufgabe innerhalb myapp.tasks
definiert und wird wie so an der Spitze meiner models.py-Datei importiert:
from .tasks import mytask
... und läuft dann auf save()
im Inneren des Modells . So weit so gut - funktioniert gut, wenn ich tatsächlich Celeryd usw. betreibe.
Ich möchte einen Komponententest konstruieren, der die Aufgabe verspottet, nur um zu überprüfen, dass sie mit den richtigen Argumenten aufgerufen wird und nicht wirklich Versuchen Sie, die Sellerie-Aufgabe jemals auszuführen.
So in der Testdatei, ich so etwas wie dies innerhalb einer Standard-Testcase habe:
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)
... aber es wird nie genannt/ist immer falsch. Ich habe versucht, verschiedene Inkarnationen (patchen myapp.models.mytask
statt, und überprüfen, ob mock_task.delay
wurde stattdessen aufgerufen. Ich habe aus der Mock Docs, dass der Import-Pfad ist entscheidend, und Googling sagt mir, dass es sollte der Weg sein, wie es in der gesehen wird Modul unter Tests (die myapp.models.mytask.delay
statt myapp.tasks.mytask.delay
wäre, wenn ich es richtig verstehe).
Wohin gehe ich hier falsch? gibt es einige spezifische Schwierigkeiten in Sellerie Aufgaben patchen? Könnte ich celery.task
(die als ein verwendet wird Patch Dekorateur zu mytask
) statt?
haben Sie versucht, „CELERY_ALWAYS_EAGER = True“ statt verspotten es einstellen? – clsung