Тестирование только проекта в Джанго

Когда я пытаюсь бежать python manage.py test в моем проекте Django (1.4) я получаю сообщение об ошибке:

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

Это задокументировано в баге Django с рекомендацией тестировать только определенные приложения, а не все. Однако у моего проекта нет приложений, models.py просто находится в корне проекта. Чтобы протестировать конкретное приложение в Django, оно выглядит так:

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

Это означает, что невозможно указать корневой каталог для тестирования. Как бы я протестировал только каталог моего проекта?

Обратите внимание, что эта ошибка является частью более широкого обсуждения открытия модульного тестирования.

2 ответа

Решение

Я бы порекомендовал использовать Django-Discover-Runner. Позволяет указать и полный пунктирный путь для тестирования.

Если вы просто запустите тест./manage.py, он обнаружит и запустит все тесты с настройкой TEST_DISCOVER_ROOT (путь к файловой системе). Если вы запустите./manage.py test full.dotted.path.to.test_module, он запустит тесты в этом модуле (вы также можете пропустить несколько модулей). Если вы дадите ему один пунктирный путь к пакету (например, приложению Django), например./manage.py test myapp, и этот пакет сам по себе не содержит каких-либо тестов, он выполнит обнаружение тестов во всех подмодулях этого пакета.

Создайте новый каталог с именем apps, переместите в него все ваше приложение за вычетом settings.py, manage.py, urls.py и всего остального, добавленного по умолчанию с помощью django-admin.py startproject, и затем запустите

./manage.py test apps

В будущем избегайте хранения всего приложения в одном каталоге. Разделите его на подпрограммы, основанные на функциональности, именно по этой причине

Другие вопросы по тегам