Существует приложение Django, использующее Django Rest Framework. Файл настроек содержит объект с настройками:
settings.py
REST_FRAMEWORK = {
...
'DEFAULT_THROTTLE_RATES': {
'burst': '30/second',
},
...
}
Предполагается, что unittest проверяет, действительно ли работает дросселирование. Однако ни один из инструментов, предоставляемых модулем Django Test ( SimpleTestCase.settings , override_settings , modify_settings ), на самом деле не работает:
SimpleTestCase.settings
class ThrottlingTest(RestApiTestCase):
def test_per_second_throttling(self):
new_config = settings.REST_FRAMEWORK
new_config['DEFAULT_THROTTLE_RATES']['burst'] = '1/second'
with self.settings(REST_FRAMEWORK=new_config):
for _ in range(0, 2):
response = self.client.get(self.api_reverse('foo'))
self.assertEqual(response.status_code, 429) # fails, 200 != 429
override_settings
class ThrottlingTest(RestApiTestCase):
new_config = settings.REST_FRAMEWORK
new_config['DEFAULT_THROTTLE_RATES']['burst'] = '1/second'
@override_settings(REST_FRAMEWORK=new_config)
def test_per_second_throttling(self):
for _ in range(0, 2):
response = self.client.get(self.api_reverse('foo'))
self.assertEqual(response.status_code, 429) # fails, 200 != 429
Оба метода отлично работают для примитивных переменных и списков, но не работают для объекта.
Состояние документов:
Когда передается класс, эти декораторы изменяют класс напрямую и возвращают его; они не создают и не возвращают измененную копию.
Так что на самом деле предполагается работать.
Есть какие-нибудь подсказки, как с этим справиться?