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

标签 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 %}

但是,如果您想通过单元测试来证明它的有效性呢? 当我可以使用 View 和函数 render_to_string 时,我可以测试模板 像这样:

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

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

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 ?

谢谢大家

最佳答案

这可能不是一个好主意(可能是更好的选择:using the test client)。但作为引用,以下是如何直接从管理方法以编程方式呈现更改 ListView :

from django.contrib.admin import AdminSite, ModelAdmin
from django.test.client import RequestFactory
from django.contrib.admin.templatetags.admin_urls import admin_urlname
from django.shortcuts import resolve_url

class MockUser:
    is_active = True
    is_staff = True

    def has_perm(self, *args):
        return True

url = resolve_url(admin_urlname(MyModel._meta, "changelist"))
request = RequestFactory().get(url)
request.user = MockUser()

class MyAdmin(ModelAdmin):
    change_list_template = "path/to/custom/template/if/needed"

admin = MyAdmin(Work, AdminSite())
html = admin.changelist_view(request).rendered_content

关于python - 自定义 django 管理模板的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30030757/

相关文章:

python - 如何在 Django 中使用带有 crispy-forms 的 CreateView

python - 使用 Django Migrations 删除表

python - Pandas :在两个数据框中找到匹配的行(不使用 `merge` )

python - 使用Python请求执行登录(Cookies未激活)

python - 在 Windows 中使用 BeautifulSoup4、Chardet 和 Python 3.3 解析页面时出错

python - 速度比较 : server-generated HTML vs templates?

unit-testing - UUID 版本 5(将哈希转换为 guid)生成算法的测试向量?

java - 在Android中正确测试静态方法

c - 如何选择要使用 GLib 测试套件运行的测试?

python - python pyqt5 类引用