django - 在 Django Rest Framework 中测试 PUT 请求

标签 django testing django-rest-framework

当我运行这个测试时

def test_update_car(self):
        new_car = Car.objects.create(make='Chevy', model='Equinox', year=2012, seats=4, color='green', VIN='12345671234567abc', current_mileage=19000, service_interval='3 months', next_service='april')
        url = reverse('car-detail', kwargs={'pk': new_car.pk})
        data = {
            'make': 'test',
            'model': 'test',
            'year': 2014,
            'seats': 5,
            'color': 'blue',
            'VIN': '12345671234567abc',
            'current_mileage': 20000,
            'service_interval': '6 months',
            'next_service': 'July',
        }
        response = self.client.put(url, data=data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(new_car.make, 'test')

断言错误

AssertionError: 'Chevy' != 'test'

我应该如何以不同的方式构造它,以便 PUT 请求实际更改 new_car 的品牌和型号?

最佳答案

如果您的 View 确实响应了 PUT 请求,则问题出在测试本身。您需要使用 .refresh_from_db(…) [Django-doc] 刷新数据库中的数据:

def test_update_car(self):
    new_car = Car.objects.create(make='Chevy', model='Equinox', year=2012, seats=4, color='green', VIN='12345671234567abc', current_mileage=19000, service_interval='3 months', next_service='april')
    url = reverse('car-detail', kwargs={'pk': new_car.pk})
    data = {
        'make': 'test',
        'model': 'test',
        'year': 2014,
        'seats': 5,
        'color': 'blue',
        'VIN': '12345671234567abc',
        'current_mileage': 20000,
        'service_interval': '6 months',
        'next_service': 'July',
    }
    response = self.client.put(url, data=data)
    <b>new_car.refresh_from_db()</b>
    self.assertEqual(response.status_code, status.HTTP_200_OK)
    self.assertEqual(new_car.make, 'test')

关于django - 在 Django Rest Framework 中测试 PUT 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66629274/

相关文章:

html - django-simple-menu 与 bootstrap 的集成

python - 始终像对待 Django Admin 中的 raw_id_fields 一样对待 ForeignKey 字段

python - Django 查询,外键不同

asp.net-mvc - 在 asp.net mvc 中实现 A-B 测试的最佳/最干净的方法是什么?

django - 单击电子邮件激活链接后如何将状态传递给前端

python - 如何在 drf-spectaulous 中包含 400 个验证错误?

使用 Django 进行 Jquery 自动完成

testing - jmeter 在 Listener 中的工作顺序是什么?

testing - 使用单个 JIRA 任务票证或创建子任务

python - Django 根据字段值过滤