【问题标题】:Testing only project in Django仅在 Django 中测试项目
【发布时间】:2012-05-16 02:34:13
【问题描述】:

当我尝试在我的 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 中测试特定的 app,它看起来像 this:

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

表示不能指定要测试的根目录。如何只测试我的项目目录?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 从 Django 1.6 开始,有一个 new test discover runner 与 django-discover-runner 对 1.5 及更低版本所做的完全一样。
    【解决方案2】:

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

    ./manage.py test apps
    

    以后,请避免将整个应用程序保存在一个目录中。正是出于这个原因,将其根据功能分为子应用程序

    【讨论】:

    • 但是我的项目只有四个模型,而且它们似乎都与我有关。我不认为只有一个项目没有应用程序是错误的,只要它没有变得太大。
    • 在另一种解决方案出现之前,我想我只会制作一个应用程序并将所有内容放在那里。
    • 我分离了我的项目并意识到它实际上是有帮助的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2013-12-07
    • 1970-01-01
    • 2020-02-05
    • 2015-04-12
    相关资源
    最近更新 更多