Как проверить приложение django, помещенное в подпапку? - PullRequest
12 голосов
/ 26 июня 2011

У меня проблема с тестированием приложений django, сгруппированных в подпапке.

Хорошо, позвольте мне объяснить ситуацию.

Стандартная структура проекта django выглядит следующим образом:

django_project/
--appname1
--appname2
--appname3
--lib
--tests
--docs
settings.py 
etc...

Когда структура проекта стандартная, вы можете запустить тесты для appname1, просто набрав команду в проекте dir:

python2 manage.py test appname1`

Мы решили поместить все приложения в подпапку, поэтому структура нашего проекта выглядит следующим образом:

django_project/
--apps/
----appname1
----appname2
----appname3
--lib
--tests
--docs
settings.py 
etc...

Все работает нормально, но мы не можем запустить тесты для приложений. Я безуспешно пытался выполнить следующие команды:

python2 manage.py test appname1
python2 manage.py test apps/appname1
python2 manage.py test apps.appname1

Есть ли способ запустить тесты с использованием manage.py для приложений, которые находятся в подпапке, или мы должны написать собственную команду для их запуска?

UPD:

У нас есть следующая ошибка:

 Traceback (most recent call last):
  File "manage.py", line 18, in <module>
    management.execute_manager(settings)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/commands/test.py", line 37, in handle
    failures = test_runner.run_tests(test_labels)
  File "/opt/python266/lib/python2.6/site-packages/django/test/simple.py", line 312, in run_tests
    suite = self.build_suite(test_labels, extra_tests)
  File "/opt/python266/lib/python2.6/site-packages/django/test/simple.py", line 244, in build_suite
    app = get_app(label)
  File "/opt/python266/lib/python2.6/site-packages/django/db/models/loading.py", line 140, in get_app
    raise ImproperlyConfigured("App with label %s could not be found" % app_label)
django.core.exceptions.ImproperlyConfigured: App with label appname1 could not be found

Мы установили приложения с настройками, такими как:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'project_name.apps.appname1',
'project_name.apps.appname2',
'project_name.apps.appname3',
 )

Ответы [ 5 ]

17 голосов
/ 06 августа 2011

Вам нужны оба этих файла в папке вашего приложения:

__init__.py
models.py

Они могут быть пустыми.

2 голосов
/ 26 июня 2011

Какую ошибку вы получаете? А что у тебя под INSTALLED_APPS в settings.py?

если у вас есть что-то вроде

INSTALLED_APPS = (
    'django.contrib.auth',
    ...
    'apps.appname1',
    'apps.appname2',
)

и __init__.py в каталоге apps, тогда оно должно работать.

1 голос
/ 12 июня 2012

Только примечание, файл settings.py содержит кортеж, поэтому символ завершения должен быть ')', а не '}'

0 голосов
/ 11 июля 2011

Это немного поздно для ответа, но для дальнейшего ознакомления с другими взглядами, с которыми я столкнулся, я столкнулся с той же проблемой и обнаружил, что мне нужно добавить пустой файл models.py в приложение. (Ему не нужны были какие-либо таблицы базы данных, но отсутствие models.py означало, что тестирующий не брал его.)

0 голосов
/ 26 июня 2011

Убедитесь, что apps имеет __init__.py. Вы должны иметь возможность запускать свои тесты по имени приложения:

python2 manage.py test appname1

Это работает под Django 1.3, я не тестировал другие версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...