【问题标题】:How to override app_settings while testing如何在测试时覆盖 app_settings
【发布时间】:2020-02-12 13:52:39
【问题描述】:

好的,我有

settings.py

SETTING1='value'
SETTING2='value'

之后我们意识到SETTING1SETTING2这些设置更多指定为app1 所以我们添加了他们apps.py

from django.apps import AppConfig


class EXAPPConfig(AppConfig):
    name = 'EXAPPConfig'
    verbose_name = "EXAPPConfig"
    SETTING1 = 'value'
    def ready(self):
        pass

并用views.py给他们打电话

app_settings = apps.get_app_config('ex_app')
app_settings.SETTING1

根据Django documentation

那么我如何在测试中用 override_settings 覆盖它们 @override_settings 我尝试使用@patch 修补配置应用,但失败了

【问题讨论】:

    标签: django testing django-settings


    【解决方案1】:

    你只能用这个来模拟你的应用配置的一个属性:

    from unittest.mock import patch
    
    from django.apps import apps
    from django.test import TestCase
    
    
    class EXAPPTest(TestCase):
        def test_mocking_app_config(self):
            original = apps.get_app_config('ex_app').SETTING1
            with patch.object(apps.get_app_config('ex_app'), 'SETTING1', new='definitely-not-original'):
                mocked = apps.get_app_config('ex_app').SETTING1
            self.assertNotEqual(original, mocked)
    

    【讨论】:

    • 是的,我试图为 AppConfig 修补整个类,而不仅仅是属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多