2

Django では、テストを実行するときに設定を上書きできますSimpleTestCase.settings()( https://docs.djangoproject.com/en/1.8/topics/testing/tools/#django.test.SimpleTestCase.settings )。Django の設定の 1 つを上書きしようとすると、うまくいきます。

テストを実行したいアプリsettings.pyは、プロジェクト全体でアプリ固有の設定を上書きできるように、次の構造を持つアプリ固有の独自の設定を実行しsettings.pyます。

from django.conf import settings
APP_SETTING1 = getattr(settings, 'APP_SETTING1', 'foo')

テストの次のダミー コードは、問題を示しています。

from django.test import TestCase
from django.conf import settings as django_settings
from my_app import settings

class MyTestCase(TestCase):
    def test_something(self):
        with self.settings(APP_SETTING1='bar'):
            print(django_settings.APP_SETTING1)    # bar
            print(settings.APP_SETTING1)           # foo

なぜそれが機能しないのですか?どうすれば機能させることができますか?

4

5 に答える 5

0

実際には、複数の設定ファイルを処理するための良い方法があります。基本的なルールは次のとおりです。

settings.py1)ファイルから直接インポートしないでください:

# BAD - avoid this
from app.settings import SOME_ENV

最終的に、誰かがカスタム設定を使用しようとすると、古い設定の一部がどこかに適用されるためです。

# GOOD
from django.conf import settings
print(settings.SOME_ENV)

この場合、実際の設定が使用されたことを確認できます。

2) 異なる環境の設定ファイルを分割します。通常、複数のファイルを作成することで実現します。

settings/base.py

DEBUG = False
AWS_STORAGE_PREFIX = 'local'
...

settings/dev.py

from settings.base import *

DEBUG = True
AWS_STORAGE_PREFIX = 'dev'
DATABASE = {# your settings for dev env}
...

また、テスト環境などをより強力に制御できるため、テスト ランナー用に別のファイルを作成することも非常に一般的です。

python manage.py test --settings=app.settings.testrunner

テスト インスタンスには設定のコンテキスト マネージャーがバインドされているため、テストに必要な変数をオーバーライドできます。

class MyTestCase(TestCase):
    def test_something(self):
        # Old settings
        with self.settings(SOME_ENV_VAR='overridden'):
            # Overridden settings
            pass
        ... 
于 2019-11-27T13:23:50.000 に答える
-1

特定の設定を使用してアプリで直接行うことができます

settings.py:

TEST_ENVIRONMENT_SETTING = True  # Test setting for my app

apps.py:

from django.conf import settings

class MyAppConfig(AppConfig):
    def ready(self):
        if getattr(settings, 'TEST_ENVIRONMENT_SETTING', False):
            # Do stuff or not do stuff

または、TestCase でこの設定を直接設定することもできます。

setattr(settings, 'TEST_ENVIRONMENT_SETTING', True)
于 2015-04-13T01:42:07.557 に答える