仅在Django中测试项目

时间:2012-05-16 02:34:13

标签: django django-testing django-1.4 django-contrib django-contenttypes

当我尝试在我的Django(1.4)项目中运行python manage.py test时,我收到错误:

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

这是Django错误中的documented,建议只测试特定应用而不是全部。但是我的项目没有应用程序,models.py只是驻留在项目根目录中。要在Django中测试特定的应用,它看起来像this

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

意味着无法指定要测试的根目录。我如何测试我的项目目录?

请注意,此错误是larger discussion on unit testing discovery的一部分。

2 个答案:

答案 0 :(得分:3)

我建议使用django-discover-runner。它允许您指定和完整的虚线路径进行测试。

  

如果您只运行./manage.py测试,它将发现并运行TEST_DISCOVER_ROOT设置(文件系统路径)下的所有测试。如果你运行./manage.py test full.dotted.path.to.test_module,它将运行该模块中的测试(你也可以传递多个模块)。如果你给它一个单独的虚线路径到一个包(比如Django应用程序),比如./manage.py test myapp,那个包本身不直接包含任何测试,它将在该包的所有子模块中进行测试发现。 / p>

答案 1 :(得分:0)

创建一个名为apps的新目录,将整个应用程序移到其中减去settings.py,manage.py,urls.py以及django-admin.py startproject默认添加的任何其他内容,然后运行

./manage.py test apps

将来,请避免将整个应用程序保存在一个目录中。出于这个原因,将其分离为基于功能的子应用程序