2

Django REST framework'ün SimpleRateThrottle tabanlı özel bir Throttling sınıfları var ve özel sınıfımı pytest ile test etmek istiyorum. Varsayılan test ayarlarımda DummyCache kullandığından, sadece bu özel test modülü için LocMemCache'ye geçmek istiyorum (SimpleRateThrottle, sayımları izlemek için önbellek arka ucunu kullanır). Sadece seçici testler için önbellek arka ucunu değiştirmenin bir yolu var mı? Bir ayardaki settings.CACHE ayarı çalışmıyor gibi görünmüyor. Ayrıca, SimpleRateThrottle içinde default_cache ile dalga geçmeyi denedim, ancak doğru alamadım.Seçici Django pytest için LocMemCache kullanın

naive_throttler.py

from rest_framework.throttling import SimpleRateThrottle 

class NaiveThrottler(SimpleRateThrottle): 
    ... 

rest_framework/throttling.py

from django.core.cache import cache as default_cache # Or how can I patch this? 

class SimpleRateThrottle(BaseThrottle): 
... 

cevap

1

Django bunun için override_settings and modify_settings dekoratörler sağlar. Eğer CACHES ayarlarını değiştirmek isterseniz sadece bir test için bunu yapabilirsiniz:

from django.test import TestCase, override_settings 

class MyTestCase(TestCase): 

    @override_settings(CACHES = { 
          'default': { 
           'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 
          } 
         }) 
    def test_chache(self): 
     # your test code 
+0

Bu, ama bunu pytest gelmez desteklemek için büyük bir haber görünmüyor olduğu şu şekildedir: iyi using fixtures for tests ait pytest 'ın paradigma izleyin, bir teste özgü ayarlarını değiştirmek için iyi olurdu? – Andy

+0

Sadece normal bir fonksiyonda pytest ile kullandım, sınıf fonksiyonları ile çalışmalıyım –

1

Django fonksiyonlarını sağlarken/dekoratörler işe yarayabilir, pytest-django bir fixture for changing settings for a test sağlar.

import pytest 

def test_cache(settings): 
    settings.CACHES = { 
     'default': { 
      'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 
     } 
    } 
    # test logic here 
+0

Günümü kurtardın! –