IntelliJ运行Django单测报错‘Apps aren't loaded’求助
解决IntelliJ单独运行Django单元测试的AppRegistryNotReady问题
我之前也踩过类似的坑,你遇到的问题本质是IntelliJ默认的单测运行方式没正确初始化Django的测试环境,直接加django.setup()又会走生产环境配置,导致误用本地数据库还被清空。下面给你几个靠谱的解决办法:
方法一:配置IntelliJ测试运行模板(推荐)
这是最彻底的方式,让IntelliJ通过manage.py test来运行单个用例,和命令行行为完全一致:
- 点击IntelliJ右上角的运行配置下拉框,选择「Edit Configurations...」
- 在左侧列表找到「Python Tests」,选中你用的测试框架(比如
unittest或pytest),点击左上角的「+」新建模板 - 在「Configuration」标签页:
- Script path:选择项目根目录下
manage.py的绝对路径 - Parameters:填写
test 你的测试路径,比如要运行backend/tests/test_views.py里UserViewTests类的test_login方法,就填test backend.tests.test_views.UserViewTests.test_login - Working directory:设置为项目根目录(也就是
manage.py所在的文件夹) - Environment variables:确认已添加
DJANGO_SETTINGS_MODULE=backend.settings和PYTHONUNBUFFERED=1
- Script path:选择项目根目录下
- 保存配置后,再点击测试用例旁的绿色三角,就会自动使用Django的专用测试数据库,测试结束后自动销毁,完全不会影响本地数据库
方法二:在测试文件中添加针对性的初始化代码
如果不想改运行配置,可以在单个测试文件开头添加以下代码,确保只初始化干净的测试环境:
import django from django.conf import settings # 仅在未配置时初始化测试环境 if not settings.configured: # 配置测试用的内存数据库和必要应用 settings.configure( DEBUG=True, DATABASES={ 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:' } }, INSTALLED_APPS=[ 'django.contrib.contenttypes', 'django.contrib.auth', 'backend', # 你的应用名称 ] ) django.setup()
这种方式用内存数据库,不会污染本地数据,但不如方法一完整——毕竟manage.py test还会自动处理测试迁移、数据隔离等细节。
额外检查项
- 确认IntelliJ的Python解释器是项目的虚拟环境(
venv),避免环境依赖不一致导致的奇怪问题 - 如果你用的是pytest,记得安装
pytest-django插件,它会自动帮你处理Django环境的初始化工作
内容的提问来源于stack exchange,提问作者Jehob
相关产品推荐
相关产品推荐

