【问题标题】:how to know which environment running unit tests in django works on如何知道在 django 中运行单元测试的环境适用于哪个环境
【发布时间】:2023-03-17 18:45:01
【问题描述】:

问题

我想将我的产品设置与本地设置分开。我找到了这个库django-split-settings,它运行良好。

但是在我的代码中的某个地方我有这样的东西:

if settings.DEBUG:

  # do debug stuff
else:
  # do prod stuff

问题是当我运行我的单元测试命令时:

./run ./manage.py test

上述 if 语句将 settings.DEBUG 评估为假。这让我想知道,哪个设置文件是读取的测试命令以及如何更正它

我尝试过的

我尝试运行这样的命令:

./run ./manage.py test --settings=bx/settings

给我这个崩溃:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/beneple/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
    utility.execute()
  File "/beneple/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 302, in execute
    settings.INSTALLED_APPS
  File "/beneple/venv/local/lib/python2.7/site-packages/django/conf/__init__.py", line 55, in __getattr__
    self._setup(name)
  File "/beneple/venv/local/lib/python2.7/site-packages/django/conf/__init__.py", line 43, in _setup
    self._wrapped = Settings(settings_module)
  File "/beneple/venv/local/lib/python2.7/site-packages/django/conf/__init__.py", line 99, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: Import by filename is not supported.

有什么想法吗?


更新:

这就是我的运行命令的样子

#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
docker run \
  --env "PATH=/beneple/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
  -e "DJANGO_SETTINGS_MODULE=bx.settings.local" \
  --link beneple_db:db \
  -v $DIR:/beneple \
  -t -i --rm \
  beneple/beneple \
  $@

目前我的 manage.py 看起来像这样

#!/usr/bin/env python
import os
import sys

    if __name__ == "__main__":

        from django.core.management import execute_from_command_line

        execute_from_command_line(sys.argv)

如果我运行这个命令:

./run ./manage.py shell

它工作正常.. 但例如当我尝试运行时

./run ./flu.sh 

依次运行 test_data.py,它的开头如下:

#!/usr/bin/env python
if __name__ == "__main__":
    import os, sys
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

    import django
    django.setup()


..
from django.conf import settings
from settings import DOMAIN

它给了我错误:

Traceback (most recent call last):
  File "./bx/test_data.py", line 18, in <module>
    from settings import DOMAIN
ImportError: cannot import name DOMAIN
Done.

我不确定为什么会这样,因为我的 base.py 肯定设置了 DOMAIN。

【问题讨论】:

标签: python django unit-testing


【解决方案1】:

--settingsThe Python path to a settings module。所以bx 是你的根项目文件夹和settings.py 文件然后

./run ./manage.py test --settings="bx"

【讨论】:

  • 这样做会给我这个错误:django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty. 在此处查看堆栈跟踪> gist.github.com/abbood/163f4e73d0a8e54972e39bb30a157d2e
  • 您必须设置 SECRET_KEY .... 最初 Django 不会提供任何密钥,因为这是敏感的.. 所以您必须提供..
  • SECRET_KEY="你的钥匙"
  • 我已经在我的settings.py 文件中设置了secret_key。这是否意味着它正试图在另一个文件中找到它?这一行引起了我的注意`文件“/beneple/venv/local/lib/python2.7/site-packages/django/test/utils.py”,第139行,在get_runner test_runner_class= settings.TEST_RUNNER`..
  • 这是否意味着我必须按照此处的说明创建 runtests.pytests/test_settings.py docs.djangoproject.com/en/1.9/topics/testing/advanced/…
【解决方案2】:

【讨论】:

  • 那么我该如何解决呢?
猜你喜欢
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2023-04-05
  • 2023-03-22
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 2013-02-26
相关资源
最近更新 更多