views:

122

answers:

2

I've been trying to add the django-lean app to my project. The django-lean app is not located in the project I'm working on, it is on the PYTHONPATH.

I have not been able to get the django-lean tests to pass.

It seems the issue is that the TestCase defines a value for urls:

 urls = 'django_lean.experiments.tests.urls'

As best as I can tell, the tests are only getting the urls located @ 'django_lean.experiments.tests.urls', but not the urls from the rest of the project.

This is causing error messages like:

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

These are triggered by {% url %} template tags in the project.

How can I make sure that the all the urls of the project are available for the tests?

EDIT: Someone showed me a script to print the visible URLs:

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)

I called this script from ipdb, this was the output:

   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/$

This corresponds to the urls located @ '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')),

The issue that I'm having is that my tests all fail because of the named urls from other apps in the project are called by URL template tags are not accessible to the tests.

I'm running Python 2.7 with Django 1.2.1

+1  A: 

To list all the url patterns your django knows you can use the answer suggested here. Run this from your tests and print/log the output.

Just note that its better to explicitly state where to import the urls from like

 from myproject import urls

because you probably have some other modules containing urls files.

Ofri Raviv
+1  A: 

The solution was pretty simple. Just import the URLs from the main project into the urls.py for the app.

from forum.urls import urlpatterns

or for a more generic solution:

from settings import ROOT_URLCONF as project_urls
urlpatterns = __import__('forum.urls').urls.urlpatterns
BryanWheelock