Почему URL-адреса проекта Django не все доступны для тестового клиента Django? - PullRequest
2 голосов
/ 20 августа 2010

Я пытался добавить приложение django-lean в свой проект. Приложение django-lean не находится в проекте, над которым я работаю, оно находится на PYTHONPATH.

Мне не удалось сдать тесты на Джанго-худ.

Кажется, проблема в том, что TestCase определяет значение для URL:

 urls = 'django_lean.experiments.tests.urls'

Насколько я могу судить, тесты получают только URL-адреса, расположенные @ 'django_lean.experiment.tests.urls', но не URL-адреса от остальной части проекта.

Это вызывает сообщения об ошибках типа:

NoReverseMatch: Reverse for 'index' with arguments '()' and keyword arguments '{}' not found.

Они запускаются шаблонными тегами {% url%} в проекте.

Как я могу убедиться, что все URL-адреса проекта доступны для тестов?

EDIT: Кто-то показал мне скрипт для печати видимых URL:

import urls

def show_urls(urllist, depth=0):
  for entry in urllist:
    print "  " * depth, entry.regex.pattern
    if hasattr(entry, 'url_patterns'):
        show_urls(entry.url_patterns, depth + 1)

Я вызвал этот скрипт из ipdb , это был вывод:

   ipdb> import urls
   ipdb> show_urls(urls.urlpatterns)
    ^test-experiment/(?P<experiment_name>.*)$
    ^test-clientsideexperiment/(?P<experiment_name>.*)$
    ^admin/
      ^(?P<experiment_name>.+)/$
      ^$
    ^main-app/
      ^goal/(?P<goal_name>.*)$
      ^confirm_human/$

Это соответствует URL-адресам, расположенным в @ 'django_lean.experiment.tests.urls'

urlpatterns = patterns('django_lean.experiments.tests.views',
  url(r'^test-experiment/(?P<experiment_name>.*)$', 'experiment_test'),
  url(r'^test-clientsideexperiment/(?P<experiment_name>.*)$', 'clientsideexperiment_test'))

urlpatterns += patterns('',
   url(r'^admin/', include('django_lean.experiments.admin_urls')),
   url(r'^main-app/', include('django_lean.experiments.urls')),

Проблема, с которой я столкнулся, заключается в том, что все мои тесты не пройдены из-за именованных URL-адресов из других приложений в проекте, вызываемых тегами шаблонов URL, которые не доступны для тестов.

Я использую Python 2.7 с Django 1.2.1

Ответы [ 2 ]

2 голосов
/ 28 августа 2010

Решение было довольно простым.Просто импортируйте URL-адреса из основного проекта в urls.py для приложения.

from forum.urls import urlpatterns

или для более общего решения:

from settings import ROOT_URLCONF as project_urls
urlpatterns = __import__('forum.urls').urls.urlpatterns
1 голос
/ 25 августа 2010

Чтобы перечислить все шаблоны URL, которые знает ваш django, вы можете использовать ответ , предложенный здесь .Запустите это из своих тестов и распечатайте / запишите выходные данные.

Просто обратите внимание, что лучше явно указать, куда импортировать URL-адреса, например

 from myproject import urls

, поскольку у вас, вероятно, есть другие модули, содержащиеURL-файлы.

...