構築済みの 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 が私が気付いていないことをしていますか?
どうもありがとう、
トッド