Django:测试模板是否继承了正确的模板

nav*_*war 3 django django-templates django-testing

在 django 中,您可以测试天气您的视图是否呈现正确的模板,如下所示

    def test_view_renders_correct_template(self):
        response = self.client.get("/some/url/")
        self.assertTemplateUsed(response, 'template.html')
Run Code Online (Sandbox Code Playgroud)

但是如果你想测试使用的模板是否是从正确的模板扩展/继承的呢?

vis*_*ell 6

正如@e4c5 指出的那样,它是相同的assertTemplateUsed

刚刚测试了一下:

应用程序/视图.py

from django.shortcuts import render_to_response


def base_index(request):
    return render_to_response('base.html')


def template_index(request):
    return render_to_response('template.html')
Run Code Online (Sandbox Code Playgroud)

应用程序/网址.py

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^base$', views.base_index, name='base'),
    url(r'^template$', views.template_index, name='template')
]
Run Code Online (Sandbox Code Playgroud)

模板/template.html

{% extends 'base.html' %}
{% block content %}
  <div>help</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

应用程序/测试.py

from django.test import TestCase


class TemplateTest(TestCase):
    def test_base_view(self):
        response = self.client.get('/base')
        self.assertTemplateUsed(response, 'base.html')
        self.assertTemplateNotUsed(response, 'template.html')

    def test_template_view(self):
        response = self.client.get('/template')
        self.assertTemplateUsed(response, 'template.html')
        self.assertTemplateUsed(response, 'base.html')
Run Code Online (Sandbox Code Playgroud)

所有 2 项测试均通过