django - 如何重写测试设置中的一个值

标签 django django-rest-framework throttling

如何在测试设置中重写 'user': '5/minute' on 'user': '2/day'

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_RATES': {
         'user': '5/minute'
    }
}

如何使用 @override_settings 或带有上下文管理的 mb 执行此操作? 我只需要在一个测试中应用这个,我不能重写整个字典

def test_mytest(self):
    value = settings.REST_FRAMEWORK
    value['DEFAULT_THROTTLE_RATES'] = {'user':'2/day'}

    data1 = {}
    data2 = {}
    data3 = {}

with self.settings(REST_FRAMEWORK=value):
    resp1 = self.client.post(self.url, data1, format='json')
    resp2 = self.client.post(self.url, data1, format='json')
    resp3 = self.client.post(self.url, data1, format='json')

assert resp3.status_code == 429, resp3.data

但是没有429错误,虽然值已经改变了

最佳答案

    from unittest import mock

    @mock.patch('rest_framework.throttling.SimpleRateThrottle.get_rate')
    def test_api(self, get_rate):
        get_rate.return_value = '1/minute'

        from rest_framework.settings import api_settings
        print(api_settings.DEFAULT_THROTTLE_RATES)
        print(api_settings.user_settings)


        url = 'api'

        response = self.client.get(url)
        self.assertEqual(response.status_code, HTTP_200_OK)

        response = self.client.get(url)
        self.assertEqual(response.status_code, HTTP_429_TOO_MANY_REQUESTS)

关于django - 如何重写测试设置中的一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52037157/

相关文章:

Django动态表单示例

带有变量的 Django url 模板标签

django - 在 django 中显示导致重复查询的组权限

javascript - 正确理解 javascript 中的 throttle

benchmarking - WCAT 请求限制

python - Django 测试 : Test the initial value of a form field

注销时的django消息

Django Rest动态选择要渲染的字段

python - 抑制 Django REST 框架中的 "field should be unique"错误

php - Laravel 5 : how to reset builtin throttle/ratelimiter?