Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在测试期间禁用特定的Django中间件_Django_Django Testing_Django Middleware - Fatal编程技术网

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

在测试期间禁用特定的Django中间件,django,django-testing,django-middleware,Django,Django Testing,Django Middleware,如何仅在测试期间禁用特定中间件(我编写的自定义中间件)?有几个选项: 为测试创建一个单独的test\u settingssettings文件,然后通过以下方式运行测试: python manage.py test --settings=test_settings 如果test处于sys.argv if 'test' in sys.argv: # modify MIDDLEWARE_CLASSES MIDDLEWARE_CLASSES = list(MIDDLEWAR

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

有几个选项:

  • 为测试创建一个单独的
    test\u settings
    settings文件,然后通过以下方式运行测试:

    python manage.py test --settings=test_settings 
    
  • 如果
    test
    处于
    sys.argv

    if 'test' in sys.argv:
         # modify MIDDLEWARE_CLASSES
          MIDDLEWARE_CLASSES = list(MIDDLEWARE_CLASSES)
          MIDDLEWARE_CLASSES.remove(<middleware_to_disable>)
    
    如果sys.argv中有“测试”:
    #修改中间件类
    中间件类=列表(中间件类)
    中间件\u类。删除()
    
希望有帮助。

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

如果您只想针对单个案例禁用中间件,还可以使用:


通过单点修改处理此问题的一个好方法是在Django项目的根目录下创建一个
conftest.py
文件,并将以下内容放入其中:

from django.conf import settings


def pytest_configure():
    """Globally remove the your_middleware_to_remove for all tests"""
    settings.MIDDLEWARE.remove(
        'your_middleware_to_remove')


在这个问题中给出了另一种禁用中间件的简洁方法


虽然对于您的情况可能不是最好的方法,但是如果您想在测试环境之外禁用中间件,这个问题提供了一个起点。

是!!!我动态地修改了配置,因为我想避免指定一个新的设置文件!非常感谢;)@daveoncode您是如何动态实现对settings.py文件的修改的?这是否也可以用于视图和特定请求,还是仅用于测试用例?
@modify_settings(MIDDLEWARE={
    'remove': 'django.middleware.cache.FetchFromCacheMiddleware',
})
def test_my_function(self):
    pass
from django.conf import settings


def pytest_configure():
    """Globally remove the your_middleware_to_remove for all tests"""
    settings.MIDDLEWARE.remove(
        'your_middleware_to_remove')