3

我有一个关于在构建的 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 做了一些我不知道的事情?

非常感谢,

托德

4

0 回答 0