Как написать модульный тест для 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.