unittest\loader.py 引发 ImproperlyConfigured

问题描述

以下代码会导致问题,如果我在 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

最后一行将解决问题。

我使用了以下参考资料:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...