在测试用例中更改页面限制

时间:2016-12-30 09:22:01

标签: python django pagination django-rest-framework django-testing

简而言之:如何在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

为什么这个设置是这里的列表?我已经验证该变量在项目的其他任何地方都没有被覆盖。

1 个答案:

答案 0 :(得分:0)

在您的rest_framework设置下方,您可以检查这是否是测试环境。这应该有效:

# settings_tests.py
from settings import *

# Override your changes.
REST_FRAMEWORK['PAGE_SIZE'] = 10

否则,您可以为测试用例创建单独的设置文件:

ember s