【发布时间】:2020-06-04 22:48:48
【问题描述】:
【问题讨论】:
标签: python django unit-testing
【问题讨论】:
标签: python django unit-testing
您可以使用 Django 的test client 测试任何模型的管理员更改视图。
为此,您需要模型的特定视图 URL,可以按照docs 中的说明生成。
以下是如何为 Group 模型运行简单的“正常加载”测试的示例:
from django.contrib.auth.models import User, Group
from django.test import TestCase, Client
from django.urls import reverse
def get_admin_change_view_url(obj: object) -> str:
return reverse(
'admin:{}_{}_change'.format(
obj._meta.app_label,
type(obj).__name__.lower()
),
args=(obj.pk,)
)
class TestGroupAdmin(TestCase):
def test_change_view_loads_normally(self):
# prepare client
User.objects.create_superuser(
username='superuser', password='secret', email='admin@example.com'
)
c = Client()
c.login(username='superuser', password='secret')
# create test data
my_group = Group.objects.create(name='Test Group')
# run test
response = c.get(get_admin_change_view_url(my_group))
self.assertEqual(response.status_code, 200)
【讨论】:
根据 Erik 的回答,这是一个对其他模型更灵活的版本。
from django.contrib.auth.models import User, Group
from django.test import TestCase, Client
from django.urls import reverse
def get_admin_change_view_url(obj: object) -> str:
return reverse(
'admin:{}_{}_change'.format(
obj._meta.app_label,
type(obj).__name__.lower()
),
args=(obj.pk,)
)
class BaseAdminTestCaseMixin:
def setUp(self):
self.client = Client()
User.objects.create_superuser(
username='superuser', password='secret', email='admin@example.com'
)
c.force_login(username='superuser', password='secret')
def get_instance(self):
raises NotImplementedError()
instance, _ = Group.objects.get_or_create(name='Test Group')
return instance
def test_change_view_loads_normally(self):
instance = self.get_instance()
response = c.get(get_admin_change_view_url(instance))
self.assertEqual(response.status_code, 200)
class TestGroupAdmin(BaseAdminTestCaseMixin, TestCase):
def get_instance(self):
instance, _ = Group.objects.get_or_create(name='Test Group')
return instance
【讨论】: