6

Wenn ich versuche python manage.py test in meinem Django (1.4) Projekt auszuführen, erhalte ich die Fehlermeldung:Testing einziges Projekt in Django

ERROR: test_site_profile_not_available (django.contrib.auth.tests.models.ProfileTestCase) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/slacy/src/tmp/env/local/lib/python2.7/site-packages/django/contrib/auth/tests/models.py", line 29, in test_site_profile_not_available 
    del settings.AUTH_PROFILE_MODULE 
    File "/home/slacy/src/tmp/env/local/lib/python2.7/site-packages/django/utils/functional.py", line 215, in __delattr__ 
    delattr(self._wrapped, name) 
AttributeError: AUTH_PROFILE_MODULE 

Dies ist documented in einem Bug Django, mit einem recomendation nur testspezifischen Anwendungen anstelle von allem. Mein Projekt hat jedoch keine Apps, die models.py befindet sich einfach im Projektstamm. Um eine bestimmte App in Django zu testen, sieht es aus wie this:

$ ./manage.py test animals 
Note that we used animals, not myproject.animals. 

was bedeutet, dass es nicht möglich ist, das Stammverzeichnis angeben, zu testen. Wie würde ich nur mein Projektverzeichnis testen?

Beachten Sie, dass dieser Fehler Teil einer larger discussion on unit testing discovery ist.

Antwort

3

Ich würde empfehlen, django-discover-runner zu verwenden. Sie können einen vollständig gepunkteten Pfad zum Testen angeben.

If you just run ./manage.py test, it'll discover and run all tests underneath the TEST_DISCOVER_ROOT setting (a file system path). If you run ./manage.py test full.dotted.path.to.test_module, it'll run the tests in that module (you can also pass multiple modules). If you give it a single dotted path to a package (like a Django app) like ./manage.py test myapp and that package does not itself directly contain any tests, it'll do test discovery in all submodules of that package.

+2

Ab Django 1.6 gibt es einen [neuen Test discover runner] (https://docs.djangoproject.com/de/dev/releases/1.6/#discovery-of-tests-in-any-test-module) macht genau das, was django-discover-runner für 1,5 und darunter macht. – alfetopito

0

Erstellen Sie ein neues Verzeichnis Apps genannt, in sie Ihre gesamte Anwendung bewegen minus die settings.py, manage.py, urls.py und was sonst ist standardmäßig durch django-admin.py startproject hinzugefügt und dann laufen

./manage.py test apps 

Vermeiden Sie es in Zukunft, Ihre gesamte Anwendung in einem Verzeichnis zu speichern. Trennen Sie es in Sub-Apps basierend auf Funktionalität, aus diesem Grund

+0

Aber mein Projekt hat nur vier Modelle, und sie alle scheinen mir ziemlich verwandt zu sein. Ich fand es nicht falsch, nur ein Projekt ohne Apps zu haben, solange es nicht zu groß wurde. –

+0

Bis eine andere Lösung kommt, schätze ich, ich werde nur eine App machen und alles dort hinein tun. –

+0

Ich trennte mein Projekt und erkannte, dass es in der Tat hilfreich war. –

Verwandte Themen