问题描述
以下代码会导致问题,如果我在 Django 中添加单元测试文件:
from myApp.models import anyModel
导入测试模块失败:test_App.test_models 回溯(最近一次调用):
File "C:\Program Files (x86)\python38-32\lib\unittest\loader.py",line 436,in _find_test_path
module = self._get_module_from_name(name)
File "C:\Program Files (x86)\python38-32\lib\unittest\loader.py",line 377,in _get_module_from_name
__import__(name)
File "d:\SC\Top4Cast\Top4CastsApp\test_App\test_models.py",line 3,in <module>
from Top4CastsApp.models import Author
File "d:\SC\Top4Cast\Top4CastsApp\models.py",line 31,in <module>
class Diagram(models.Model):
File "d:\SC\Top4Cast\env\lib\site-packages\django\db\models\base.py",line 108,in __new__
app_config = apps.get_containing_app_config(module)
File "d:\SC\Top4Cast\env\lib\site-packages\django\apps\registry.py",line 253,in
get_containing_app_config
self.check_apps_ready()
File "d:\SC\Top4Cast\env\lib\site-packages\django\apps\registry.py",line 135,in check_apps_ready
settings.INSTALLED_APPS
File "d:\SC\Top4Cast\env\lib\site-packages\django\conf\__init__.py",line 82,in __getattr__
self._setup(name)
File "d:\SC\Top4Cast\env\lib\site-packages\django\conf\__init__.py",line 63,in _setup
提高ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS,but settings are not
已配置。您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()。
解决方法
经过一段时间的挣扎,我找到了原因并修复了它。先解释一下问题:
1- 错误情况是什么:
您已将 Django+VSCode 用于您的 Web 项目,并希望从使用 vscode-test-panel 发现您的测试中获益,并可能通过使用测试资源管理器单独调试您的测试。这是处理此工作的网络参考:
如果您按照步骤操作,一切都很好,但只要您像这样从 models.py 导入模型:
- 从 myApp.models 导入 anyModel
您的测试发现将面临以下错误:
提高ImproperlyConfigured( django.core.exceptions.ImproperlyConfigured:请求设置 INSTALLED_APPS,但未配置设置。您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()。
2-错误是什么:
如果您遇到此错误,您可以看到此命令行命令运行良好:
- python manage.py 测试
问题与设置DJANGO_SETTINGS_MODULE有关。
3-解决方案是什么:
I found the fix like thius:
1- using pytest framework instead of unit test framework
2- pip install pytest-django
3- create pytest.ini and put it in the root of your project
4- add the following content in pytest.ini:
-- FILE: pytest.ini (or tox.ini)
[pytest]
DJANGO_SETTINGS_MODULE = mysite.settings (mysite shoul be change to your web project name)
# -- recommended but optional:
python_files = tests.py test_*.py *_tests.py
最后一行将解决问题。
我使用了以下参考资料: