在我的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配置中的测试内容?
当你运行:
python manage.py test
对于工作目录中具有模式test*.py
的所有文件,该命令将按默认递归查找。它不受INSTALLED_APPS
中settings.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