当有人想在测试中更改设置时(是的,可以在那里更改它),我们可以使用 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/', ...
这样的长列表?
也许它不是文件配置,但你可以使用 ** 将 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