在测试期间禁用特定的Django中间件

dav*_*ode 6 django django-middleware django-testing

如何在测试期间禁用特定的中间件(我编写的自定义中间件)?

ale*_*cxe 8

有几种选择:

  • 创建一个单独的test_settings设置文件进行测试,然后通过以下方式运行测试:

    python manage.py test --settings=test_settings 
    
    Run Code Online (Sandbox Code Playgroud)
  • settings.py如果test在,则随时修改您的sys.argv

    if 'test' in sys.argv:
         # modify MIDDLEWARE_CLASSES
          MIDDLEWARE_CLASSES = list(MIDDLEWARE_CLASSES)
          MIDDLEWARE_CLASSES.remove(<middleware_to_disable>)
    
    Run Code Online (Sandbox Code Playgroud)

希望有帮助。

  • @daveoncode 你到底是如何即时实现对 settings.py 文件的修改的? (2认同)

Why*_*ugo 8

也相关(因为此页面在相关查询的搜索引擎中排名很高):

如果您只想为单个案例禁用中间件,您还可以使用@modify_settings

@modify_settings(MIDDLEWARE={
    'remove': 'django.middleware.cache.FetchFromCacheMiddleware',
})
def test_my_function(self):
    pass
Run Code Online (Sandbox Code Playgroud)


lam*_*ave 5

https://docs.djangoproject.com/en/dev/topics/testing/tools/#django.test.override_settings

from django.test import TestCase, override_settings
from django.conf import settings

class MyTestCase(TestCase):

    @override_settings(
        MIDDLEWARE_CLASSES=[mc for mc in settings.MIDDLEWARE_CLASSES
                            if mc != 'myapp.middleware.MyMiddleware']
    )
    def test_my_function(self):
        pass
Run Code Online (Sandbox Code Playgroud)