在 Django Rest Framework 中测试 PUT 请求

Jak*_*ern 4 testing django 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')
Run Code Online (Sandbox Code Playgroud)

我收到断言错误

AssertionError: 'Chevy' != 'test'
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*sem 5

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

\n
def test_update_car(self):\n    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\')\n    url = reverse(\'car-detail\', kwargs={\'pk\': new_car.pk})\n    data = {\n        \'make\': \'test\',\n        \'model\': \'test\',\n        \'year\': 2014,\n        \'seats\': 5,\n        \'color\': \'blue\',\n        \'VIN\': \'12345671234567abc\',\n        \'current_mileage\': 20000,\n        \'service_interval\': \'6 months\',\n        \'next_service\': \'July\',\n    }\n    response = self.client.put(url, data=data)\n    new_car.refresh_from_db()\n    self.assertEqual(response.status_code, status.HTTP_200_OK)\n    self.assertEqual(new_car.make, \'test\')
Run Code Online (Sandbox Code Playgroud)\n