Я пытался добавить приложение django-lean в свой проект. Приложение django-lean не находится в проекте, над которым я работаю, оно находится в PYTHONPATH.
Мне не удалось пройти тесты django-lean.
Кажется, проблема в том, что TestCase определяет значение для URL-адресов:
urls = 'django_lean.experiments.tests.urls'
Насколько я могу судить, тесты получают только URL-адреса, расположенные @ 'django_lean.experiments.tests.urls', но не URL-адреса остальной части проекта.
Это вызывает сообщения об ошибках, такие как:
NoReverseMatch: Reverse for 'index' with arguments '()' and keyword arguments '{}' not found.
Они активируются тегами шаблона {% url %} в проекте.
Как я могу убедиться, что все URL-адреса проекта доступны для тестов?
РЕДАКТИРОВАТЬ: кто-то показал мне скрипт для печати видимых 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.experiments.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.