如何用router为user-detail编写单元测试.注册基名



当我为user-detail编写测试时出现此错误,我认为错误来自response = self.client.get(reverse('user-detail',kwargs={'pk':1})),我使用路由器。注册配置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:coderestfullapiexamplesellHousetests.py", line 68, in test_list_user_detail
self.assertEqual(response.status_code, status.HTTP_200_OK)
AssertionError: 404 != 200
----------------------------------------------------------------------

尝试打印响应。数据:{'detail': ErrorDetail(string='Not found.', code='not_found')}

不能依赖数据库的主键值调度。测试可以以任何顺序运行,并且测试的任何子集都可以运行。因此,有时它可能是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,然后在确定URL时使用self.user.pk

最新更新