如何在测试期间禁用特定的中间件(我编写的自定义中间件)?
答案 0 :(得分: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
答案 1 :(得分:3)
有几种选择:
创建单独的test_settings
设置文件以进行测试,然后通过以下方式运行测试:
python manage.py test --settings=test_settings
settings.py
位于test
,则即时修改您的sys.argv
if 'test' in sys.argv:
# modify MIDDLEWARE_CLASSES
MIDDLEWARE_CLASSES = list(MIDDLEWARE_CLASSES)
MIDDLEWARE_CLASSES.remove(<middleware_to_disable>)
希望有所帮助。
答案 2 :(得分:3)
也相关(因为此页面在相关查询的搜索引擎中排名很高):
如果您只想为单个案例禁用中间件,您还可以使用@modify_settings
:
@modify_settings(MIDDLEWARE={
'remove': 'django.middleware.cache.FetchFromCacheMiddleware',
})
def test_my_function(self):
pass
答案 3 :(得分:1)
通过单点修改来解决此问题的一种好方法是在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')
答案 4 :(得分:0)
此问题How to disable middleware for certain functions using a decorator中给出了另一种禁用中间件的简洁方法。
尽管对于您的情况而言可能不是最好的方法,但是如果您想在测试环境之外禁用中间件,则此问题为您提供了一个起点。