Django文档测试未运行

6 投票
3 回答
1263 浏览
提问于 2025-04-17 04:23

我在用django-nose运行django的文档测试时遇到了问题。虽然放在/tests目录下的单元测试可以正常运行,但文档测试却不行。

我想在我的“season”模块上运行文档测试:

python manage.py test season

但得到的输出是:

nosetests --verbosity 1 season --with-doctest
Creating test database for alias 'default'...

----------------------------------------------------------------------
Ran 0 tests in 0.001s

OK
Destroying test database for alias 'default'...

我只是想试一个基本的文档测试,看看能不能让它工作,比如:

    """
    >>> 1+1 == 2
    True
    """

这个代码在我的models.py文件里。我还尝试了其他的文档测试,实际上是测试代码的,但仍然没有看到任何测试被运行。当我用--verbosity 3运行时,我看到一行可能是问题所在:

nose.selector: INFO: <models.py path> is executable; skipped

不过我找不到更多关于这是什么意思的信息。

以下是settings.py中的相关片段:

INSTALLED_APPS = (
    'south',
    'django_nose',
    'season',
)

# Django-nose configuration
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
NOSE_ARGS = ['--with-doctest']

根据django-nose的文档,django_nose在INSTALLED_APPS中排在south之后。我使用了--with-doctest这个参数,正如这里建议的那样:Nose不运行Django文档测试,并且按照这里的建议更新了我的django-nose到最新版本:为什么django-nose不运行我模型中的文档测试?

这是我使用的版本:
django 1.3
python 2.7.1
django-nose 0.1.3
nose 1.1.2

我觉得我在基本设置上可能漏掉了一些东西。如果需要其他信息,请告诉我。非常感谢任何帮助!

3 个回答

1

nosetests --verbosity 1 season --with-doctest

用法:manage.py test [选项] [应用名 ...]

也许你只需要把 season 移到最后面。

2

这个提示信息告诉你,你的 models.py 文件被忽略了,因为它被设置成了可执行文件。这意味着你需要做以下操作:

chmod -x models.py

除非你有特别的理由让这个文件保持可执行状态,否则只需在你的 NOSE_ARGS 中添加 --exe 就可以了。

4

我知道提问者提到的是1.3版本,但因为这个回答在搜索“django doctests 不运行”时会出现,所以我来分享一下1.6版本的相关内容,参考自Django doctests in views.py。在这个版本的Django中,doctests是不会自动包含的,所以在$APP/tests.py里你需要这样写:

import doctest
def load_tests(loader, tests, ignore):
    tests.addTests(doctest.DocTestSuite())
    return tests

[这段代码只会找到tests.py文件里的doctests;如果你想在其他模块上运行doctests,比如myapp/models.py,你需要先from myapp import models,然后再写tests.addTests(doctest.DocTestSuite(models))]

撰写回答