简而言之:如何在Django的测试用例中覆盖PAGE_SIZE
的{{1}}设置?
有关问题的详细信息:我的项目REST_FRAMEWORK
中有以下设置:
base.py
现在我想创建一个测试用例,在其中我将页面大小更改为10.但是,我不能覆盖此特定设置,同时保持字典的其余部分不变。有谁知道怎么做?
这就是我的尝试:
1)在测试方法上面添加modify_settings装饰器:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'Masterdata.authentication.FashionExchangeAuthentication',
),
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
),
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 100
}
这不会改变设置。
2)使用override_settings作为上下文管理器:
@modify_settings(REST_FRAMEWORK={
'remove': 'PAGE_SIZE',
'append': {'PAGE_SIZE': 10}
})
然而,test_settings = settings.REST_FRAMEWORK
test_settings['PAGE_SIZE'] = 10
with override_settings(REST_FRAMEWORK = test_settings):
# do stuff
的行失败了,因为显然变量test_settings['PAGE_SIZE']=10
是列表而不是字典。
settings.REST_FRAMEWORK
为什么这个设置是这里的列表?我已经验证该变量在项目的其他任何地方都没有被覆盖。
答案 0 :(得分:0)
在您的rest_framework设置下方,您可以检查这是否是测试环境。这应该有效:
# settings_tests.py
from settings import *
# Override your changes.
REST_FRAMEWORK['PAGE_SIZE'] = 10
否则,您可以为测试用例创建单独的设置文件:
ember s