6

Kiedy próbuję uruchomić python manage.py test w moim (1.4) Django, pojawia się błąd:Testowanie projektu tylko w 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 

To jest documented w błąd Django, z rekomendacji do konkretnych aplikacji tylko testowych zamiast wszystkich. Jednak mój projekt nie ma aplikacji, models.py po prostu rezyduje w katalogu głównym projektu. Aby przetestować konkretne aplikację w Django, wygląda this:

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

co oznacza, że ​​nie jest możliwe określenie katalogu głównego do przetestowania. Jak przetestować tylko mój katalog projektu? Ten problem jest częścią larger discussion on unit testing discovery.

Odpowiedz

3

Polecam, używając django-discover-runner. To pozwala określić i pełną przerywaną ścieżkę do przetestowania.

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

Zaczynając od Django 1.6, istnieje [nowy test odkrył biegacza] (https://docs.djangoproject.com/en/dev/releases/1.6/#discovery-of-tests-in-any-test-module), który robi dokładnie to, co robi django-discover-runner dla wersji 1.5 i starszych. – alfetopito

0

Utwórz nowy katalog o nazwie aplikacje, przenieść całą aplikację do niego minus settings.py, manage.py, urls.py i cokolwiek innego jest dodawany domyślnie przez django-admin.py startproject a następnie uruchomić

./manage.py test apps 

W przyszłości należy unikać przechowywania całej aplikacji w jednym katalogu. Oddziel go na sub-aplikacje w oparciu o funkcjonalność, z tego powodu

+0

Ale mój projekt ma tylko cztery modele i wszystkie wydają się być ze mną spokrewnione. Nie myślałem, że to źle, że mam tylko projekt bez aplikacji, o ile nie jest zbyt duży. –

+0

Dopóki nie pojawi się inne rozwiązanie, chyba po prostu zrobię jedną aplikację i wszystko tam umieści. –

+0

Oddzieliłem mój projekt i zdałem sobie sprawę, że w rzeczywistości było to pomocne. –