我有一个关于在构建的 Django 项目中测试我的 Django 应用程序的问题。
首先,我没有构建相同的项目,并且一切正常。除了将我的测试放在他们自己的目录中之外,这个项目遵循标准的 Django 项目架构:
django_project/
manage.py
settings.py
urls.py
app1/
models.py
views.py
urls.py
tests/
app2/
...
如果我在这种情况下运行测试,那就太好了!
当涉及到构建环境时,这一切都有点不同。在那里,我尝试 svn 检查我的项目和应用程序,并使它们的路径在我的 bin 目录中可用(我希望这也意味着它可用于任何魔法 djangorecipe 正在做的事情)。无论如何,这就是我的构建的样子:
[buildout]
parts =
django_project
app1
app2
django
extra-paths =
${buildout:directory}
${buildout:directory}/parts
${buildout:directory}/parts/django_project
${buildout:directory}/parts/app1
${buildout:directory}/parts/app2
[django_project]
recipe = infrae.subversion
urls =
https://svn/django_projects/trunk/ .
[app1]
recipe = infrae.subversion
urls
= https://svn/path/app1/trunk/ .
[app2]
recipe = infrae.subversion
urls =
https://svn/path/app2/trunk/ .
[django]
recipe = djangorecipe
version = 1.2
project = django_project
projectegg = django_project
wsgi=true
settings=settings
extra-paths = ${buildout:extra-paths}
test =
app1
app2
当我运行构建时,我得到以下目录树。
django_buidout/
...
bin/
django
django.wsgi
test
parts/
django/
django_project/
__init__.py
settings.py
...
app1/
setup.py
app1/
__init__.py
tests/
app2/
setup.py
app2/
__init__.py
tests/
我可以进入 django shell,这样就可以了。但是如果我运行 ./bin/test 我会得到一个“ImportError:没有名为 django.project.urls 的模块”。(点符号不是我的 django_project.settings.URL_CONF=django_project.urls 的错误)这很有趣,因为如果我启动 shell,我可以导入 django_project.urls。除此之外,如果我通过 ./bin/django test app1 运行测试,所有测试都会运行。app1 很有趣,因为它没有对视图的测试。
在视图测试中,我使用了 urlresolvers.reverse,它也与 django.tests Client() 类一起显示在回溯中。
我的架构中是否有什么东西搞砸了,或者 urlresolvers.reverse 做了一些我不知道的事情?
非常感谢,
托德