仅在Django中测试项目

sau*_*ook 6 django django-contrib django-testing django-contenttypes django-1.4

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

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
Run Code Online (Sandbox Code Playgroud)

这是记录在一个Django的bug,用recomendation只测试特定的应用程序,而不是全部.但是我的项目没有应用程序,models.py只是简单地驻留在项目根目录中.要在Django中测试特定的应用程序,它看起来像这样:

$ ./manage.py test animals
Note that we used animals, not myproject.animals.
Run Code Online (Sandbox Code Playgroud)

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

请注意,此错误是有关单元测试发现更大讨论的一部分.

sau*_*ook 4

我建议使用django-discover-runner。它允许您指定要测试的完整点路径​​。

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

  • 从 Django 1.6 开始,有一个 [新的测试发现运行器](https://docs.djangoproject.com/en/dev/releases/1.6/#discovery-of-tests-in-any-test-module)正是 django-discover-runner 在 1.5 及以下版本中所做的事情。 (2认同)