2

私はDjango RESTフレームワークのSimpleRateThrottleに基づいてカスタムのThrottlingクラスを持っています。私はpytestでカスタムクラスをテストしたいと思います。私のデフォルトのテスト設定はDummyCacheを使用しているので、この特定のテストモジュールのためにLocMemCacheに切り替えたいと思う(SimpleRateThrottleはカウントを追跡するためにキャッシュバックエンドを使用する)。選択的なテストのためにキャッシュバックエンドを切り替える方法はありますか?フィクスチャのsettings.CACHEの設定は機能していないようです。私もSimpleRateThrottle内のdefault_cacheを嘲笑してみましたが、それを正しく取得できませんでした。LocMemCacheを使用して選択的なDjango pytest

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): 
... 

答えて

1

Djangoはこのためoverride_settings and modify_settingsデコレータを提供します。あなただけの1つのテストのためにCACHES設定を変更したい場合は、この操作を行うことができます。

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

これは素晴らしいニュースですが、pytestはそれをしないサポートしていないようですか? – Andy

+0

普通の関数でpytestと一緒に使っただけで、クラス関数でも動作するはずです –

1

Djangoが機能を提供しながら/デコレータはpytest-djangofixture for changing settings for a testを提供し、動作する可能性があります。より良いusing fixtures for testspytestのパラダイムに従うために、次のようにテストに固有の設定を変更することが最善のようになります。

import pytest 

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

私の一日を保存しました! –

関連する問題