首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试管理更改视图?

如何测试管理更改视图?
EN

Stack Overflow用户
提问于 2020-02-20 15:02:02
回答 2查看 3.2K关注 0票数 2

对于Django模型,我有一个相当复杂的管理更改视图。

关于如何测试管理列表视图(例如,这里),有很多资源,但是对于变更视图却没有。

我如何为它创建一个测试用例?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-20 15:02:02

您可以使用Django的测试客户端测试任何模型的管理更改视图。

为此,您将需要模型的特定视图URL,可以按照文档中的描述生成该视图URL。

下面是一个示例,说明如何为Group模型运行一个简单的“正常加载”测试:

代码语言:javascript
复制
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)
票数 4
EN

Stack Overflow用户

发布于 2020-02-20 15:31:37

这是一个更灵活的版本,以埃里克的答案为基础的其他模型。

代码语言:javascript
复制
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 = User.objects.create_superuser(
            username='superuser', password='secret', email='admin@example.com'
        )
        self.c.force_login(user)

    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 = self.client.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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60322847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档