Django 测试 DoesNotExist
Django test DoesNotExist
我正在尝试在视图中测试撤销功能:
@login_required
def revoke(request, id):
"""
Delete access token
"""
obj = Hiren.objects.get(pk=id)
obj.delete()
return redirect('/hiren')
这是我抛出错误的测试代码:
class TestRevokeView(TestCase):
def setUp(self):
User.objects.create_superuser(
username='admin', password='admin', email='admin@admin.lol')
item = Hiren()
item.access_token = "bla bla"
item.authorized = True
item.save()
def test_logged_in_user_can_delete_object(self):
self.client.login(username='admin', password='admin')
count = Hiren.objects.all().count()
self.assertEqual(count, 1)
response = self.client.get('/revoke/1/', follow=True)
self.assertRedirects(response, '/hiren/')
错误代码如下:
Traceback (most recent call last):
File ".....tests.py", line 109, in test_logged_in_user_can_delete_object
response = self.client.get('/revoke/1/', follow=True)
....................
self.model._meta.object_name
github.models.DoesNotExist: Hiren matching query does not exist.
所以我的问题是我在这里缺少什么。
您需要确保您在 setUp
方法上创建的 Hiren
实例具有 ID
等于 1
为避免这种情况,将 Hiren
id 实例设置为 class 变量,然后在您的测试方法中使用它。
class TestRevokeView(TestCase):
def setUp(self):
User.objects.create_superuser(
username='admin', password='admin', email='admin@admin.lol')
item = Hiren()
item.access_token = "bla bla"
item.authorized = True
item.save()
self.HIREN_ID = item.id
def test_logged_in_user_can_delete_object(self):
self.client.login(username='admin', password='admin')
count = Hiren.objects.all().count()
self.assertEqual(count, 1)
response = self.client.get('/revoke/%s/' % self.HIREN_ID), follow=True)
self.assertRedirects(response, '/hiren/')
可能 Hiren
项的 pk
不是 1.
class TestRevokeView(TestCase):
def setUp(self):
User.objects.create_superuser(
username='admin', password='admin', email='admin@admin.lol')
self.item = Hiren()
self.item.access_token = "bla bla"
self.item.authorized = True
self.item.save()
def test_logged_in_user_can_delete_object(self):
self.client.login(username='admin', password='admin')
count = Hiren.objects.all().count()
self.assertEqual(count, 1)
response = self.client.get('/revoke/{0}/'.format(self.item.pk), follow=True)
self.assertRedirects(response, '/hiren/')
我正在尝试在视图中测试撤销功能:
@login_required
def revoke(request, id):
"""
Delete access token
"""
obj = Hiren.objects.get(pk=id)
obj.delete()
return redirect('/hiren')
这是我抛出错误的测试代码:
class TestRevokeView(TestCase):
def setUp(self):
User.objects.create_superuser(
username='admin', password='admin', email='admin@admin.lol')
item = Hiren()
item.access_token = "bla bla"
item.authorized = True
item.save()
def test_logged_in_user_can_delete_object(self):
self.client.login(username='admin', password='admin')
count = Hiren.objects.all().count()
self.assertEqual(count, 1)
response = self.client.get('/revoke/1/', follow=True)
self.assertRedirects(response, '/hiren/')
错误代码如下:
Traceback (most recent call last):
File ".....tests.py", line 109, in test_logged_in_user_can_delete_object
response = self.client.get('/revoke/1/', follow=True)
....................
self.model._meta.object_name
github.models.DoesNotExist: Hiren matching query does not exist.
所以我的问题是我在这里缺少什么。
您需要确保您在 setUp
方法上创建的 Hiren
实例具有 ID
等于 1
为避免这种情况,将 Hiren
id 实例设置为 class 变量,然后在您的测试方法中使用它。
class TestRevokeView(TestCase):
def setUp(self):
User.objects.create_superuser(
username='admin', password='admin', email='admin@admin.lol')
item = Hiren()
item.access_token = "bla bla"
item.authorized = True
item.save()
self.HIREN_ID = item.id
def test_logged_in_user_can_delete_object(self):
self.client.login(username='admin', password='admin')
count = Hiren.objects.all().count()
self.assertEqual(count, 1)
response = self.client.get('/revoke/%s/' % self.HIREN_ID), follow=True)
self.assertRedirects(response, '/hiren/')
可能 Hiren
项的 pk
不是 1.
class TestRevokeView(TestCase):
def setUp(self):
User.objects.create_superuser(
username='admin', password='admin', email='admin@admin.lol')
self.item = Hiren()
self.item.access_token = "bla bla"
self.item.authorized = True
self.item.save()
def test_logged_in_user_can_delete_object(self):
self.client.login(username='admin', password='admin')
count = Hiren.objects.all().count()
self.assertEqual(count, 1)
response = self.client.get('/revoke/{0}/'.format(self.item.pk), follow=True)
self.assertRedirects(response, '/hiren/')