Ich habe eine REST-API in Django geschrieben, mit und Endpunkt, der eine Sellerie-Aufgabe in die Warteschlange stellt, wenn ich sie posten möchte. Die Antwort enthält die Aufgaben-ID, mit der ich testen möchte, ob die Aufgabe erstellt wurde und das Ergebnis erhält. Also, würde Ich mag so etwas wie zu tun:In-Memory-Broker für Sellerie-Unit-Tests
def test_async_job():
response = self.client.post("/api/jobs/", some_test_data, format="json")
task_id = response.data['task_id']
result = my_task.AsyncResult(task_id).get()
self.assertEquals(result, ...)
ich natürlich will keine Sellerie Arbeiter laufen muß die Unit-Tests laufen, ich erwarte, dass es irgendwie lustig zu machen. Ich kann CELERY_ALWAYS_EAGER nicht verwenden, weil das den Broker insgesamt zu umgehen scheint, was mich daran hindert, AsyncResult zu verwenden, um die Aufgabe durch seine ID zu erhalten (wie angegeben here).
Ich gehe durch Sellerie und kombu docs, ich habe festgestellt, dass es einen In-Memory-Transport für Komponententests gibt, die tun würden, was ich suche. Ich habe versucht, das Überschreiben der BROKER_URL
Einstellung auf die Tests zu verwenden:
@override_settings(BROKER_URL='memory://')
def test_async_job():
Aber das Verhalten ist das gleiche wie mit dem ampq Broker: Es blockiert den Test auf das Ergebnis warten. Irgendeine Idee wie soll ich diesen Broker konfigurieren, damit er in den Tests funktioniert?
Sie benötigen noch einen Mitarbeiter mit dem In-Memory-Broker. Leider glaube ich nicht, was du machen willst ist möglich. Sie müssen entweder einen Worker für die Verwendung mit Ihren Tests starten oder Tasks synchron mit CELERY_ALWAYS_EAGER ausführen (in diesem Fall erhalten Sie kein AsyncResult, wie Sie festgestellt haben). – jrothenbuhler
Warum müssen Sie auf die Aufgabe über ihre ID zugreifen? Dies sieht nach einem guten Kandidaten für Komponententests aus. Warum nicht die Funktion testen, die die Aufgabe direkt erzeugt, anstatt es über HTTP zu tun? Auf diese Weise erhalten Sie das 'EagerResult' mit der gleichen API wie' AsyncResult'. – patrys
mögliches Duplikat von [Komponententest mit Django-Sellerie?] (Http://stackoverflow.com/questions/4055860/unit-testing-with-django-sellery) –