Django不在INSTALLED_APPS中执行app的测试

问题描述 投票:0回答:1

在我的Django项目下,有一些应用程序,所有这些都有单元测试。我现在正在工作的其中一个应该只包含在dev / stage环境中,所以我使用环境变量来启用它。

当这个变量出现时,它被添加到INSTALLED_APPS并且它正常工作,问题是Django正在为这个应用程序执行测试,即使它不在INSTALLED_APPS中,并且它失败并显示以下消息:

ImportError:无法导入测试模块:debug.tests.unit.test_services`

......(追溯信息)......

RuntimeError:模型类debug.models.Email不声明显式的app_label,也不在INSTALLED_APPS的应用程序中。

当我在这个应用程序的模型的app_label中定义class Meta时,错误是不同的,它说它找不到表,我认为这是因为应用程序不在INSTALLED_APPS中,因此它的迁移不会被执行。

OperationalError:没有这样的表:debug_email

我不确定为什么Django会对所有应用程序执行测试,但不会进行迁移。

我是否遗漏了Django配置中的测试内容?

django django-apps django-unittest
1个回答
1
投票

当你运行:

python manage.py test

对于工作目录中具有模式test*.py的所有文件,该命令将按默认递归查找。它不受INSTALLED_APPSsettings.py的影响。

您可以指定某个应用来测试它:

python manage.py test app_label

或指定路径:

python manage.py test myapp/tests

如果要排除某些测试,可以标记它们并使用--exclude-tag选项。

运行python manage.py test --help以获取有关所有选项的信息。

官方documentation提供了关于如何运行测试的不同可能性的大量信息。

编辑:

如果您的应用程序仅在开发环境中需要,但在生产环境中不需要,则可以拆分settings.py。一种可能的解决方案是将所有开发设置外包到文件local_settings.py中,并将其从版本控制或生产分支中排除,即不要将其推送到生产环境中。

local_settings.py

DEBUG = True 
INSTALLED_APPS += (
    # Django Debug Toolbar would be for example
    # used only in development
    'debug_toolbar',
    'your dev app',
)

settings.py

try:
    from .local_settings import *
except ImportError:
    pass
© www.soinside.com 2019 - 2024. All rights reserved.