Django应用测试无法单独运行(但全测试可以)

2 投票
1 回答
680 浏览
提问于 2025-04-17 12:13

我有一个叫“fstore”的Django应用,它在INSTALLED_APPS里注册为“foo.bar.fstore”。当我通过“manage.py test”运行所有Django测试时,我能看到它的测试结果,比如:

失败:testFilesWithDuplicatePathsDoNotOverwriteEachOther (foo.bar.fstore.tests.fileRecTests.TestFunctionality)

但是,当我尝试专门运行这个应用的测试,通过“manage.py test fstore”,Django却告诉我:

运行了0个测试,耗时0.000秒

如果我应用的名字写错了或者其他问题,它应该会报错,但它明显识别出了这个应用……只是找不到它的测试(尽管这些测试在这个应用的“tests”文件夹里,并且里面有一个__init__.py文件)。所以我基本的问题是:这是怎么回事?更具体地说,我该如何只运行这个应用的测试,而不运行其他的测试呢?

哦,为了排除简单的答案,是的,这个应用里有models.py__init__.py

* 编辑 *

我刚刚运行了“manage.py shell”,结果发现有些问题:

from django.db.models import get_app, get_apps
get_app("fstore")
<module 'foo.bar.search.models' from '/baz/python/foo/bar/search/models.pyc'>

这当然是一个完全错误的模型的编译文件(我也不知道怎么会这样)。所以我删除了这个.pyc文件,现在我得到了一个更正常的错误:

django.core.exceptions.ImproperlyConfigured: 找不到标签为fstore的应用

这算是进展……但这仍然不能解释为什么Django找不到我的应用。

还有一点:虽然Django运行得很好(我可以“manage.py runserver”,在我的应用里浏览等等),但在命令行里,我显然没有任何应用。例如,尝试运行“manage.py test debug_toolbar”也给我一个类似的配置错误。希望这对某些人来说有意义……

1 个回答

1

哇,真是糟糕。我想我可能是在梦里修改了Django的核心文件,因为有一个文件(models/loading.py)被改成了硬编码的foo.bar.search应用。我没有任何记录显示我编辑过这个文件,也没有在Eclipse里找到相关的历史记录,而且我本来没有理由去修改这个文件。但是……既然没有其他人能做这件事,我想我可能真的是修改了(或者Django有个非常奇怪的bug,导致它自己修改源代码)。

我想我把这个问题和答案留在这里,万一有其他人遇到类似的情况,这能帮到他们。不过这实在是太罕见了,我怀疑会有人遇到。

撰写回答