Django unittest中如何使用assertTemplateUsed校验多个响应模板
Django单元测试多模板渲染校验的解决方案
报错原因
- 模板名拼写错误:你代码中传入的模板名是
goods/item_list.html,但错误提示明确显示实际渲染的模板是goods/items_list.html,少了字符s,拼写不匹配会直接触发断言失败。 assertTemplateUsed用法错误:Django内置的assertTemplateUsed方法不支持直接传入模板名元组做批量校验,你传入元组时它会把整个元组当成单个模板名称去匹配,自然匹配失败。
正确实现方式
方式1:分多次调用assertTemplateUsed(最常用,错误提示更清晰)
# 修正拼写后分别校验每个模板 self.assertTemplateUsed(response, 'goods/items_list.html') self.assertTemplateUsed(response, 'base.html') self.assertTemplateUsed(response, 'inc/_nav.html')
方式2:一次性批量校验(适合模板数量多的场景)
可以直接读取响应对象的templates属性拿到所有使用的模板,再做集合校验:
# 提取所有实际使用的模板名称 actual_templates = {template.name for template in response.templates} # 定义预期的模板集合 expected_templates = {'goods/items_list.html', 'base.html', 'inc/_nav.html'} # 校验所有预期模板都被使用 self.assertTrue(expected_templates.issubset(actual_templates))
如果需要严格校验仅使用了预期模板、没有多余模板,可以改成:
self.assertEqual(actual_templates, expected_templates)
内容的提问来源于stack exchange,提问作者user15587034
相关产品推荐
相关产品推荐

