【问题标题】:django testing with local settings使用本地设置进行 django 测试
【发布时间】:2011-11-04 16:54:57
【问题描述】:

Python 2.7 Django 1.2

我在测试 Django 应用程序时遇到了奇怪的 local_settings 行为。我的<project>/settings.py 设置如下:

DEBUG = False
TEMPLATE_DEBUG = DEBUG

ADMINS = (
        ("Me", "me@me.com"),
)

MANAGERS = ADMINS + (('Person1', 'person1@blah.com'),)

# ... rest of settings

try:
    from local_settings import *
except ImportError:
    pass

<project>/local_settings.py 我有:

DEBUG = True

MANAGERS = (
        ('Me', 'me@me.com'),
)

因此,在本地工作时,MANAGERS 设置应为(('Me', 'me@me.com'),)DEBUG 应设置为True

但是,在我的一个应用程序的测试中,我正在测试 settings.DEBUG 并获得 False,但 MANAGERS 设置设置正确(其中只有“我”)。任何想法为什么会发生这种情况?以下是<project>/<app>/tests.py文件的相关部分:

from django.conf import settings
from django.test import TestCase

# ...
class MyTests(TestCase):
    def mytest(self):
        if settings.DEBUG:
            self.assertEqual(settings.MANAGERS, (('Me', 'me@me.com'),))
        else:
            self.assertEqual(settings.MANAGERS, (('Me', 'me@me.com'), ('Person1', 'person1@blah.com')))

结果是

AssertionError: (('Me', 'me@me.com'),) != (('Me', 'me@me.com'), ('Person1', 'person1@blah.com'))

所以看起来它正在测试 else 分支,因为 settings.DEBUG 设置不正确,然后提升 AssertionError 因为 settings.MANAGERS 设置正确。

如果我运行python manage.py shell,我会得到:

>>> from django.conf import settings
>>> settings.DEBUG
True
>>> settings.MANAGERS
(('Me', 'me@me.com'),)

所以它们在那里设置正确。

我知道我可以在我的测试中手动覆盖设置,但我想尝试使用settings.DEBUG,这样无论是在本地运行还是在生产环境中运行,测试都能通过。

有什么想法吗?

【问题讨论】:

标签: python django


【解决方案1】:

运行测试时使用--settings 选项

python manage.py test --settings=mysite.settings_local

【讨论】:

    【解决方案2】:

    这是 Django 中的有意选择:

    无论配置文件中 DEBUG 设置的值如何,所有 Django 测试都以 DEBUG=False 运行。这是为了确保观察到的代码输出与生产环境中的输出相匹配。

    参考:https://docs.djangoproject.com/en/dev/topics/testing/#other-test-conditions

    【讨论】:

    • 这是 NUTS。你应该如何调试你的测试?如果您只在 DEBUG 为 False 时设置电子邮件怎么办?
    • @MagicLAMP 在这种情况下你可以使用override_settings
    【解决方案3】:

    我记得读过你不应该在运行时以任何方式更改设置值,这会导致问题。

    【讨论】:

    • django 文档说不要这样做:settings.BLAH = 'blah' 在设置文件之外,但将文件导入设置文件是犹太教
    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    相关资源
    最近更新 更多