【问题标题】:How to override a nested Django setting in tests如何在测试中覆盖嵌套的 Django 设置
【发布时间】:2016-03-25 18:11:54
【问题描述】:

我知道 Django 的 override_settingssmodify_settings 装饰器,但是如何覆盖更复杂的设置?

例如,我有这样的设置:

REST_FRAMEWORK = {
    ...various keys...
    'DEFAULT_THROTTLE_RATES = {
         'anon': '100/day',
     }

    ...more keys...
}

我想将费率设置为 10000/天,这样我在本地工作时就不会碰到它们。 modify_settings 仅适用于列表,要使用 override_settings 我必须重复整个变量(大约 50 行长)。

有什么解决办法吗?

【问题讨论】:

    标签: django django-rest-framework settings


    【解决方案1】:

    您可以在本地/测试设置中使用REST_FRAMEWORK[DEFAULT_THROTTLE_RATES] = { 'anon': '400/day' }

    如果您使用@override_setttings,则必须覆盖整个字典。 Django @override_settings does not allow dictionary?

    【讨论】:

    • 是的,这也是我几分钟前整理出来的,但我希望有一种方法可以让覆盖仅在重要的测试中出现。
    • 您是否使用单独的设置进行测试?如果是,您可以将此行放在您的测试设置文件中..
    • 否....直到现在才考虑使用单独的设置进行测试。这是一种常见的做法吗?您如何使用不同的设置进行测试?
    • 如果你需要使用override_settings,你已经完全覆盖了dict。最好尝试使用单独的测试设置
    • @mlissner 使用单独的设置(用于测试或任何其他目的),创建一个与 settings.py 相同级别的文件 settings_test.py,第一行是'from settings import *',然后覆盖任何需要的东西。然后使用 ./manage.py test --settings=package.for.settings_test 运行测试
    猜你喜欢
    • 2018-10-20
    • 2015-12-29
    • 2016-07-24
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    相关资源
    最近更新 更多