Как написать модульный тест для user-detail с базовым именем router.register

эта ошибка появляется, когда я пишу тест для user-detail, я думал, что ошибка от response = self.client.get(reverse('user-detail',kwargs={'pk':1})), я использовал router.register для настройки базового имени ulrs, и это заставляет меня путаться при написании теста. Так что в этом случае, где точка в моем коде была неправильной? Большое спасибо!

    def test_list_user_detail(self):
        """
            List user detail
        """
        self.client.post(self.url, self.data, format='json')
        resp = self.client.post(
            '/auth/token/login/', data={'email': 'Foo@gmail.com', 'password': 'Boo'}, format='json')
        token = resp.data['auth_token']
        self.client.credentials(HTTP_AUTHORIZATION='token '+token)

        response = self.client.get(reverse('user-detail',kwargs={'pk':1}))
        print(response.data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
======================================================================
FAIL: test_list_user_detail (sellHouse.tests.UserTest)
List user detail
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\code\restfullapi\example\sellHouse\tests.py", line 68, in test_list_user_detail
    self.assertEqual(response.status_code, status.HTTP_200_OK)
AssertionError: 404 != 200

----------------------------------------------------------------------

try print response.data : {'detail': ErrorDetail(string='Not found.', code='not_found')}

исправлено, потому что я написал 2 тестовых случая выше, в каждом тестовом случае включено создание пользователя, поэтому pk id для этого теста должен быть = 3

Вы не можете полагаться на отправку значения первичного ключа базой данных. Тесты могут запускаться в любом порядке, и может запускаться любое подмножество тестов. Поэтому возможно, что иногда будет 3, тогда как при запуске тестов в другом порядке, или только подмножества тестов, будет 1. Поэтому вы должны работать с первичным ключом вашего объекта базы данных, например:

from django.test import TestCase

class MyTestCase(TestCase):
    def setUp(self):
        self.user = User.objects.create_user(
            email='Foo@gmail.com', password='Boo'
        )

    def test_list_user_detail(self):
        """
            List user detail
        """
        self.client.post(self.url, self.data, format='json')
        resp = self.client.post(
            '/auth/token/login/', data={'email': 'Foo@gmail.com', 'password': 'Boo'}, format='json')
        token = resp.data['auth_token']
        self.client.credentials(HTTP_AUTHORIZATION='token '+token)

        response = self.client.get(reverse('user-detail',kwargs={'pk': self.user.pk}))
        print(response.data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

Здесь мы присваиваем созданный объект self.user, а затем используем self.user.pk при определении URL.

Вернуться на верх