自定义django管理模板的单元测试

时间:2015-05-04 12:56:30

标签: python django unit-testing django-templates django-admin

不知道如何处理这种情况。 最近用django开始单元测试。 在我的项目中,我有一个自定义的change_list.html来在管理页面上添加一个按钮。

我正在寻找可以验证此自定义按钮的单元测试。 这是我在admin.py中的代码:

class LocationAdmin(OSMGeoAdmin):

    def get_urls(self):
        urls = patterns('', url(
            r'^import/$',
            self.admin_site.admin_view(self.import_process)
        ))

        super_urls = super(LocationAdmin, self).get_urls()

        return urls + super_urls

    def import_process(self, request):
        pass

admin.site.register(Location, LocationAdmin)

此代码自动将模板加载到app / admin / app / app / change_list.html中 这是:

{% extends "admin/change_list.html" %}
{% load staticfiles %}
{% block extrahead %}
    <link rel="stylesheet" href="{% static "css/custom_upload.css" %}">
{% endblock %}
{% block object-tools-items %}
    {{ block.super }}
    <li><a role="button" href="import/" class="btn btn-primary btn-margin-left">Import</a></li>

{% endblock %}

但是,当你想通过单元测试证明这项工作的时候呢? 当我可以使用视图和函数render_to_string时,我能够测试模板 像这样:

response = my_view(HttpRequest())
expected_html = render_to_string(
    'template.html',
    {'arg_key': arg}
)
self.assertEqual(response.content.decode(), expected_html)

但是在这里,我不知道如何使用关联模板部分调用管理视图。 这是我发现在管理页面上添加单元测试的开始。

class MockRequest(object):
    pass


class MockSuperUser(object):

    def has_perm(self, perm):
        return True

request = MockRequest()
request.user = MockSuperUser()


class ModelAdminTests(TestCase):

    def setUp(self):
        self.site = AdminSite()

    def test_admin_import_button_on_location_admin_page(self):
        ma = ModelAdmin(Location, self.site)
        #Here the correct assert ?

谢谢大家。

1 个答案:

答案 0 :(得分:0)

如果你曾经使用Pytest和pytest-django(你显然没有使用它并且我没有足够的声誉来评论)你使用了一个admin_client夹具,如下所示:http://pytest-django.readthedocs.org/en/latest/helpers.html#admin-client-django-test-client-logged-in-as-admin