我在测试分组在子文件夹中的django应用程序时遇到问题。
好吧,让我解释一下情况。
Standart django项目结构如下:
django_project/
--appname1
--appname2
--appname3
--lib
--tests
--docs
settings.py
etc...
当项目结构为标准时,您只需在项目目录中键入命令即可为appname1运行测试:
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',
)
答案 0 :(得分:17)
您的app文件夹下需要这两个文件:
__init__.py
models.py
他们可能是空的。
答案 1 :(得分:2)
你得到什么错误?你在INSTALLED_APPS
的{{1}}下有什么?
如果您有类似
的内容settings.py
和INSTALLED_APPS = (
'django.contrib.auth',
...
'apps.appname1',
'apps.appname2',
)
目录中的__init__.py
应该可以正常工作。
答案 2 :(得分:1)
只需注意,settings.py文件包含一个元组,因此终止字符应为')'而不是'}'
答案 3 :(得分:0)
确保apps
有__init__.py
。您应该能够通过应用名称运行测试:
python2 manage.py test appname1
这适用于Django 1.3,我还没有测试过任何其他版本。
答案 4 :(得分:0)
这是一个有点迟的答案,但是为了将来参考其他窥视,我遇到了同样的问题,发现我需要在应用程序中添加一个空的models.py
文件。 (它不需要任何数据库表,但没有models.py
意味着测试运行器没有提取它。)
答案 5 :(得分:0)
在django 2.2.4中,使用用于测试文件的文件夹,即\test
,而不是默认的test.py
文件。这就是对我有用的。
python manage.py test .\apps-folder\app1
如果您还将文件夹用于测试文件,请确保包含__init__.py