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/

ジャンゴシェルにアクセスできるので、動作します。しかし、./bin/test を実行すると、「ImportError: No module named django.project.urls」が表示されます。(ドット表記は私の django_project.settings.URL_CONF=django_project.urls の間違いではありません) 興味深いのは、シェルを起動すると django_project.urls をインポートできるからです。それに加えて、./bin/django test app1 を介してテストを実行すると、すべてのテストが実行されます。app1 は、ビューに対するテストがないため興味深いものです。

ビューのテストでは、urlresolvers.reverse を使用しています。これは、django.tests Client() クラスとともにトレースバックにも表示されます。

私のアーキテクチャに何か問題がありますか、それとも urlresolvers.reverse が私が気付いていないことをしていますか?

どうもありがとう、

トッド

4

0 に答える 0