Question

When I try to run python manage.py test in my Django (1.4) project, I get the error:

ERROR: test_site_profile_not_available (django.contrib.auth.tests.models.ProfileTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/slacy/src/tmp/env/local/lib/python2.7/site-packages/django/contrib/auth/tests/models.py", line 29, in test_site_profile_not_available
    del settings.AUTH_PROFILE_MODULE
  File "/home/slacy/src/tmp/env/local/lib/python2.7/site-packages/django/utils/functional.py", line 215, in __delattr__
    delattr(self._wrapped, name)
AttributeError: AUTH_PROFILE_MODULE

This is documented in a Django bug, with a recomendation to only test specific apps instead of all. However my project has no apps, the models.py simply resides in the project root. To test a specific app in Django, it looks like this:

$ ./manage.py test animals
Note that we used animals, not myproject.animals.

meaning that it is not possible to specify the root directory to test. How would I test just my project directory?

Note that this bug is part of a larger discussion on unit testing discovery.

Was it helpful?

Solution

I would recommend using django-discover-runner. It allows you to specify and full dotted path to test.

If you just run ./manage.py test, it'll discover and run all tests underneath the TEST_DISCOVER_ROOT setting (a file system path). If you run ./manage.py test full.dotted.path.to.test_module, it'll run the tests in that module (you can also pass multiple modules). If you give it a single dotted path to a package (like a Django app) like ./manage.py test myapp and that package does not itself directly contain any tests, it'll do test discovery in all submodules of that package.

OTHER TIPS

Create a new directory called apps, move your entire application into it minus the settings.py, manage.py, urls.py and whatever else is added by default by django-admin.py startproject and then run

./manage.py test apps

In the future, avoid keeping your entire application in one directory. Separate it into sub-apps based on functionality, for this very reason

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top