从文件覆盖测试设置

问题描述 投票:0回答:1

当有人想在测试中更改设置时(是的,可以在那里更改它),我们可以使用 override_settings()modify_settings()(如 observed here)。 这在并行运行测试时也有效.

在我的例子中,我有多个测试类,并且只想在运行相应测试时更改各种设置(它应该在不运行该测试时恢复设置)。

一般来说,会做这样的事情

from django.test import TestCase, override_settings

@override_settings(LOGIN_URL='/other/login/')
class LoginTestCase(TestCase):

    def test_login(self):
        response = self.client.get('/sekrit/')
        self.assertRedirects(response, '/other/login/?next=/sekrit/')

事实是,由于列表会变大,因此从文件中获取键值对也会变大。如何为此使用文件而不是像

LOGIN_URL='/other/login/', ...
这样的长列表?

python django django-testing django-settings
1个回答
1
投票

也许它不是文件配置,但你可以使用 ** 将 dict 作为 kwargs 传递给装饰器:

from .TEST_CONF import EXAMPLE_CONF

@override_settings(**EXAMPLE_CONF)
class TestExample(TestCase):
    def test_sth(self):
        from django.conf import settings
        self.fail('{} {} {}'.format(settings.A, settings.B, settings.CELERY_ALWAYS_EAGER))

和 TEST_CONF 文件如下所示:

EXAMPLE_CONF = {
    'CELERY_ALWAYS_EAGER': True,
    'A': 'sth',
    'B': 'else',
}

这次失败的结果是:

AssertionError: sth else True
© www.soinside.com 2019 - 2024. All rights reserved.