2013-03-23 32 views
8

Ich habe ein Django-Projekt, das django-nose verwendet. Ich möchte django-celery zu dem Projekt hinzufügen. Ich verwende Komponententests. Sowohl Django-Nose als auch Django-Sellerie benötigen eine TEST_RUNNER Einstellung in meiner settings.py Datei. Im Einzelnen:Mit Django-Nase und Django-Sellerie zusammen - Unit-Test

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 

für django-Nase und:

TEST_RUNNER = 'djcelery.contrib.test_runner.CeleryTestSuiteRunner' 

für django-Sellerie.

Wie soll ich damit umgehen, damit ich beide Pakete verwenden kann?

+0

+1 idk, vielleicht müssen Unterklasse 1 und fügen Sie die Funktionalität des anderen zu Ihrer eigenen Klasse. –

Antwort

6

Ich fand, dass der beste Weg, damit umzugehen ist, den Sellery-Testläufer zu überspringen. Ich verwende einfach meine Sellerie-Tests mit einer @override_settings(CELERY_ALWAYS_EAGER=True) dekorieren und alles wird gut getestet.

4

Wenn Sie in der Lage sind, Ihre Tests in Sellerie und nicht-Sellerie abhängige Funktionalität zu isolieren, könnten Sie overriding settings auf den Testklassen versuchen, die Sellerie Aufgaben aufrufen:

from django.test.utils import override_settings 

@override_settings(TEST_RUNNER='djcelery.contrib.test_runner.CeleryTestSuiteRunner') 
class AsyncTestCase(TestCase): 
    def test_async(self): 
     self.assertEquals(add.delay(4,4), 8) 

während die NoseTestRunner wie die eingestellt werden würde Standard in settings.py

+0

Danke - ich werde diesen Ansatz prüfen. – Erik

1

Sie können Sellery Runner und Nose Runner subclass, dann bekommen Sie gute Seiten für alle von ihnen.

from django_nose import NoseTestSuiteRunner 
from djcelery.contrib.test_runner import CeleryTestSuiteRunner 

class TestRunner(CeleryTestSuiteRunner, NoseTestSuiteRunner): 
    pass 

dann in den Einstellungen:

TEST_RUNNER = '<package to>.TestRunner' 

Warum es funktioniert:

help(TestRunner) 

Sie erhalten:

| Method resolution order: 
|  TestRunner 
|  djcelery.contrib.test_runner.CeleryTestSuiteRunner 
|  django_nose.runner.NoseTestSuiteRunner 
|  django_nose.runner.BasicNoseRunner 
|  django_nose.runner.BaseRunner 
|  django.test.runner.DiscoverRunner 
|  builtins.object 

Der Test CeleryTestRunner nichts tat nur einige Konfigurationseinstellung und Rufen Sie dannan. Dann wird der Super nach setup_test_environment() in dieser Kette suchen.

Sehen Sie sich das Video von Raymond Hettinger an: super super angesehen (here).