DjangoRestFramework: Unit Testing AssertionError: 404 != 200 while Test update

Я начал писать модульные тесты для своих API, но застрял на обновлении данных пользователя, получив ошибку утверждения 404!=200. Я делюсь своим кодом для справки. Пожалуйста, сообщите мне мою ошибку и краткое объяснение, так как я новичок в django rest.

Я создал только один класс "class TestUser(APITestCase):" для тестирования 2 API это нормально, так как я расширяю URL в патче клиента обновления?

views.py

class UserListCreateAPIView(generics.ListCreateAPIView):
    permission_classes = [IsUserOrIsAdmin]
    serializer_class = UserSerializer
    def get_queryset(self):
        """
        This view should return a list of all the purchases
        for the currently authenticated user.
        """
        if self.request.user.is_staff == False:

            user_data= self.request.user.id
            data = User.objects.filter(id= user_data)
            return data
        else:
            data = User.objects.all()
            return data

    
    
    
class UserRetrtieveUpdateDestroyAPIView(generics.RetrieveUpdateDestroyAPIView):
    permission_classes = [IsUserOrIsAdmin]
    serializer_class = UserSerializer
    def get_queryset(self):
        """
        This view should return a list of all the purchases
        for the currently authenticated user.
        """
        if self.request.user.is_staff == False:

            user_data= self.request.user.id
            data = User.objects.filter(id= user_data)
            return data
        else:
            data = User.objects.all()
            return data
    
urls.py

path('customer_info/', UserListCreateAPIView.as_view()),
    path('customer_info/<int:pk>/', UserRetrtieveUpdateDestroyAPIView.as_view()),
tests.py

from rest_framework.test import APITestCase
from .models import User







class TestUser(APITestCase):
    url = "/api/v1/customer_info/"

    def setUp(self):
        User.objects.create(email="naveen@example.com",name="Naveen",contact_number="9090909098",gender="0",address="jaipur",state="Rajasthan",city="Jaipur",country="India",pincode="302016",dob="1907-07-20",is_active="True",
        is_admin= "False")

    def test_get_User(self):

        response = self.client.get(self.url)
        print(response)
        result = response.json()
        # print(result)

        self.assertEqual(response.status_code, 200)
        self.assertIsInstance(result, list)
        

    def test_post_User(self):
        # definition
        data = {
            "email":"ujjval@example.com",
            "password":"123456",
            "name":"ujjval",
            "contact_number":"9090909098",
            "gender":"0",
            "address":"jaipur",
            "state":"Rajasthan",
            "city":"Jaipur",
            "country":"India",
            "pincode":"302016",
            "dob":"1907-07-20"
        }

        # process
        response = self.client.post(self.url, data=data)
        # print(response)
        result = response.json()
        # print(result)

        # assert
        self.assertEqual(response.status_code, 201)
        self.assertEqual(result["email"], "ujjval@example.com")

    def test_update_User(self):
        pk = "1"
        data = {
            "email":"naveen@example.com",
            
        }

        response = self.client.patch(self.url + f"{pk}/", data=data)
        result = response.json()
        print(result)

        self.assertEqual(response.status_code, 200)
        self.assertEqual(result["email"], "ujjval@example.com")

Думаю, вам нужно задать имена путей URL и использовать их в тестовом классе.

path('customer_info/', UserListCreateAPIView.as_view(), name="customer_info_view"),
path('customer_info/<int:pk>/', UserRetrtieveUpdateDestroyAPIView.as_view(), name="customer_info_detail_view"),

А в тестовом классе,

from django.urls import reverse

class TestUser(APITestCase):
    url = "/api/v1/customer_info/"

    def setUp(self):
        ...

    def test_get_User(self):    
        response = self.client.get(reverse('customer_info_view'))
        ...
    
    def test_post_User(self):
        data = {
            ...
        }
        response = self.client.post(reverse('customer_info_view'), data=data)
        ...
 
    def test_update_user(self):
        ...
        response = self.client.patch(reverse('customer_info_detail_view', kwargs={
            'pk': pk,
        }), data, content_type='application/json')
        ...
Вернуться на верх