2

我遇到了一个问题,即 django 测试运行程序没有找到我的应用程序的测试,比如这个:

Django 测试运行程序找不到测试

该线程上的一条评论建议使用 django-admin.py 创建一个新应用程序并查看测试是否在那里运行。例如

django-admin.py startapp delme

然后

adding "delme" to my INSTALLED_APPS

然后

copying my tests.py from the app where it wasn't getting found into delme/

和中提琴!测试确实运行了。所以,好吧,我有工作,但我不明白。我重新阅读了我认为应该是 django 文档的相关部分,但一分钱拒绝放弃。

顺便说一句,该应用程序通过 runserver 和 wsgi 工作,因此似乎没有任何严重的配置问题。而且我的测试都从他们的新家通过,所以我显然需要更多测试:)

具体来说,我在 virtualenv 中运行 django,所以我在我希望运行测试的(激活的)virtualenv 中运行了“django-admin.py startapp”。这不会使测试在我的其他 virtualenvs 中运行,我仍然有旧的症状(Ran 0 测试)。我有大量的 virtualenvs,由非平凡的摊铺机脚本管理。一种使用“path.copytree”来部署项目,重写 apache 配置文件,重新启动 apache,使用适当的 virtualenv 写入 wsgi 文件等。另一种使用 PIP/GCC/aptitude/etc 来引导/拆除不同的环境,更新包根据配置等。所以我想了解 django-startapp 和简单地复制文件之间的区别,所以我可以修复这些 paver 脚本,以便测试可以在我想要的任何环境中运行。

4

2 回答 2

0

阅读您的描述后,对我来说唯一有意义的是现有应用程序的路径位置。您能否确认以下几点:

  1. 您的应用与 delme 应用位于同一文件夹级别
  2. 您的应用程序文件夹包含一个__init__.py文件
  3. INSTALLED_APPS您的应用在设置中列出

我猜这是一个丢失的__init__.py文件,因为这会让一些人绊倒。要回答您的具体问题,django-admin startapp 并没有做任何神奇的事情。它只是在正确的位置创建正确的文件夹和文件。

您的文件夹结构应该是...

my_project/
    __init__.py
    manage.py
    settings.py
    my_app/
        __init__.py
        tests.py
        models.py
    delme/
        __init__.py
        tests.py
        models.py

另请注意此评论

您不能轻易地直接命名 TestCase 类。您命名应用程序,Django 运行程序通过查看 models.py 和 tests.py 来完成它的发现工作

于 2012-04-11T07:42:26.507 回答
0

解决了(仍然有一点魔法)。

diff表明我的旧应用程序没有models.py,但新应用程序(“delme”,工作)有。我不认为旧应用程序需要一个,它正在从其他地方导入它的所有域类。

在我的旧应用程序中触摸一个空白即可models.py修复它,现在测试运行程序找到tests.py并且一切都按预期工作。结论 - 如果应用程序没有 models.py,django 测试运行器将找不到应用程序的 tests.py。

我所说的不在不同的 virtualenvs 中工作是假的(红鲱鱼),我对我的部署脚本在做什么有点困惑。

于 2012-04-11T23:57:29.887 回答