問題簡而言之:在Django的測試用例中,如何覆蓋的PAGE_SIZE
設置?有關問題更改測試用例中的頁面限制
詳細信息:我在我的項目的base.py
以下設置:
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
}
現在我想創建一個測試情況下,我改變頁面大小10。但是,我不能覆蓋這個特殊設置,同時保持字典的其餘部分不變。有誰知道如何去做?
這是我的嘗試:
1)添加modify_settings裝飾上面的測試方法:
@modify_settings(REST_FRAMEWORK={
'remove': 'PAGE_SIZE',
'append': {'PAGE_SIZE': 10}
})
這不會更改設置。
2)使用作爲override_settings上下文管理器:
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
是一個列表,而不是一個字典失敗。
print(settings.REST_FRAMEWORK)
['DEFAULT_PERMISSION_CLASSES', 'DEFAULT_AUTHENTICATION_CLASSES', 'DEFAULT_FILTER_BACKENDS', 'DEFAULT_PAGINATION_CLASS', 'DEFAULT_RENDERER_CLASSES']
這是怎麼設置的?我已經驗證該變量不會覆蓋項目中的其他任何地方。
爲什麼不添加一個設置文件的測試? – itzMEonTV
在您的設置中,您可以通過檢查sys.argv來創建條件。如果sys.argv在其中有'test',那麼將PAGE_SIZE設置爲10 –