Django uygulaması yüklendiğinde kodu çalıştırmak için bir başlangıç kancası olarak kullandığımız AppConfig.ready
işlevinin davranışı için otomatik bir test yazmaya çalışıyoruz. Bizim ready
yöntem uygulamamız, testimizde geçersiz kılmamız gereken bir Django ayarını kullanır ve doğal olarak bunu elde etmek için override_settings
dekoratörünü kullanmaya çalışırız.Django: Geçersiz kılma AppConfig Hazır İşlevinde Kullanılan Ayar
Ancak bir sapma var - test çalıştırıldığında, ready
işlevi çalıştırıldığında, ayar geçersiz kılma henüz başlatılmadı (hala orijinal değeri settings.py
kullanıyor). Ayarı, ready
işlevi çağrıldığında geçersiz kılma uygulanacak şekilde geçersiz kılmanın bir yolu var mı?
Bu davranışı göstermek için bazı kod:
settings.py
MY_SETTING = 'original value'
dummy_app/__ init__.py
default_app_config = 'dummy_app.apps.DummyAppConfig'
dummy_app/apps.py
from django.apps import AppConfig
from django.conf import settings
class DummyAppConfig(AppConfig):
name = 'dummy_app'
def ready(self):
print('settings.MY_SETTING in app config ready function: {0}'.format(settings.MY_SETTING))
dummy_app/tests.py
from django.conf import settings
from django.test import TestCase
from django.test.utils import override_settings
@override_settings(MY_SETTING='overridden value')
@override_settings(INSTALLED_APPS=('dummy_app',))
class AppConfigTests(TestCase):
def test_to_see_where_overridden_settings_value_is_available(self):
print('settings.MY_SETTING in test function: '.format(settings.MY_SETTING))
self.fail('Trigger test output')
Biz sadece iddia edilmektedir testler için bu ayarı geçersiz kılmaya dikkat etmek önemlidir
======================================================================
FAIL: test_to_see_where_overridden_settings_value_is_available (dummy_app.tests.AppConfigTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/labminds/venv/labos/src/dom-base/dummy_app/tests.py", line 12, in test_to_see_where_overridden_settings_value_is_available
self.fail('Trigger test output')
AssertionError: Trigger test output
-------------------- >> begin captured stdout << ---------------------
settings.MY_SETTING in app config ready function: original value
settings.MY_SETTING in test function: overridden value
--------------------- >> end captured stdout << ----------------------
Çıktı ready
'un davranışı, bu nedenle settings.py
ayarını değiştirmeyi düşünmüyoruz ya da Bu dosyanın iyonu sadece otomatik testlerimizi çalıştırmak için kullanılır. Zaten kabul
Seçeneklerden biri - biz sadece bizim testinde AppConfig
sınıf başlatmak ready
diyoruz ve davranışını bu şekilde test etmek (hangi ayar dekoratör tarafından geçersiz olacağını işaret) olabilir. Bununla birlikte, bunu bir bütünleştirme testi olarak çalıştırmayı ve Django'nun bizim için işlevi çağırmak için doğal davranışına güvenmeyi tercih ediyoruz - bu bizim için önemli bir işlevdir ve Django'nun başlatma davranışı değiştiğinde testin başarısız olmasını sağlamak istiyoruz.