问题描述
编辑 这篇文章已被编辑,因为我已对该问题进行了归零,但尚未解决。
你好
我遇到一个问题,当我通过pycharm运行测试时,会引发以下错误:
django.core.exceptions.ImproperlyConfigured:请求的设置为INSTALLED_APPS,但未配置设置。在访问设置之前,您必须定义环境变量DJANGO_SETTINGS_MODULE或调用settings.configure()。
当我刚运行./manage.py test
并成功执行测试时,pycharm似乎出现了问题。
我使用pycharm设置的配置是:
- 脚本路径:/MainFolder/MainProjects/project1-backend/tests/test_models.py
- 环境变量:PYTHONUNBUFFERED = 1; DJANGO_SETTINGS_MODULE = project1backend.settings 请注意该文件夹所属的文件夹,而不是project1-backend
- Python解释器:Python 3.8 (MainFolder)〜/ MainFolder / MainProjects / bin / python
- 工作目录:/ Users / myname / MainFolder / MainProjects / project1-backend
- 将内容根添加到PYTHONPATH:未选中
- 将源根添加到PYTHONPATH:已选中
Project hierarchy
编辑 测试文件应为__init__.py
而不是__inity__.py
我的.env文件位于project1-backend文件夹中。我正在做静脉手术以执行./manage.py测试。
#import from Model class
from django.test import SimpleTestCase
from django.db import models
#User model
class User(models.Model):
email = models.CharField(max_length=256,primary_key=True)
first_name = models.CharField(max_length=256)
last_name = models.CharField(max_length=256)
def __str__(self):
return self.email # this defaults to the email address
from django.test import TestCase
from app.models import User
class TestModels(TestCase):
def setUp(self):
self.user1 = User.objects.create(
email="m@gmail.com",first_name="misha",last_name="lee"
)
def test_app_user(self):
self.setUp()
self.assertTrue(isinstance(self,User)
编辑
Traceback (most recent call last):
File "/Users/myname/MainFolder/MainProjects/project1-backend/tests/test_models.py",line 4,in <module>
from app.models import User
File "/Users/myname/MainFolder/MainProjects/project1-backend/app/models.py",line 6,in <module>
class User(models.Model):
File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/db/models/base.py",line 107,in __new__
app_config = apps.get_containing_app_config(module)
File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/apps/registry.py",line 252,in get_containing_app_config
self.check_apps_ready()
File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/apps/registry.py",line 134,in check_apps_ready
settings.INSTALLED_APPS
File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/conf/__init__.py",line 76,in __getattr__
self._setup(name)
File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/conf/__init__.py",line 57,in _setup
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS,but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Process finished with exit code 1
我也包括了
INSTALLED_APPS = [
'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','app.apps.AppConfig'
]
*请注意,我也尝试过“ app”本身,但无济于事。
提前感谢帮助!注意我已经查看了PYTHONPATH答案和__init__.py
答案,发现它们没有帮助。但是,我确实认为这与路径有关。
我也查看了以下资源: Running Django tests in PyCharm 但发现答案无法解决我的问题。
解决方法
我一直在搜寻SO
数天,因为我不知道为什么当我运行./manage.py test
时一切正常并且执行了测试。似乎设置已正确配置(即DJANGO_SETTINGS_MODULE)。但是,当我开始调查错误,调试并找到可能的答案时,我发现Pycharm / pytest无法识别settings.py文件中的设置(或与此相关的任何文件)。即使在我尝试通过PyCharm中的测试的“编辑配置”添加环境变量(即DJANGO_SETTINGS_MODULE)之后。
解决方案
首先,我导航到PyCharm中的Run/Debug Configurations
并使用左上角的“-”按钮删除测试,以删除所有先前的测试配置(Pycharm Professional 2020.1)。
我必须利用一个EnvFile插件,该插件会在运行测试之前通过导航到PyCharm --> Preferences --> Plugins
并搜索EnvFile来启动。然后,我添加了用于存储所有环境变量的隐藏的.env文件。
然后这导致我进入:
Error raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
我借助Django文档https://docs.djangoproject.com/en/3.0/ref/applications/并添加了Django.setup()来填充应用程序注册表,从而纠正了此问题。
此外,正如我发现的那样,这里没有很多文档,请特别注意您使用pytest,nosetest等的测试类型以及切线中使用的import语句。另外,请注意TestCase和SimpleTestCase之间的区别,因为后者不需要访问数据库。