Python 如何断言django在pytest中使用特定模板

Python 如何断言django在pytest中使用特定模板,python,django,pytest,pytest-django,Python,Django,Pytest,Pytest Django,在unittest样式中,我可以通过调用。例如,当Django通过模板插入值时,这很有用,这样我就不能只测试字符串的相等性 我应该如何在pytest中编写等效语句 我一直在查看,但不知道如何操作。如果我理解得很清楚,您需要测试Django是否正确呈现了传递给模板的数据。如果是这种情况,那么概念是错误的,您应该首先测试在视图中收集的数据,然后确保它调用模板。测试模板是否包含正确的数据就是测试Django框架本身。如注释中所述,使用以下命令来断言模板文件在视图中实际使用: response = cl

unittest
样式中,我可以通过调用。例如,当Django通过模板插入值时,这很有用,这样我就不能只测试字符串的相等性

我应该如何在pytest中编写等效语句


我一直在查看,但不知道如何操作。

如果我理解得很清楚,您需要测试Django是否正确呈现了传递给模板的数据。如果是这种情况,那么概念是错误的,您应该首先测试在视图中收集的数据,然后确保它调用模板。测试模板是否包含正确的数据就是测试Django框架本身。

如注释中所述,使用以下命令来断言模板文件在视图中实际使用:

response = client.get(article.get_absolute_url())
assert 'article_detail.html' in (t.name for t in response.templates)
更新:自v3.8.0(2020-01-14)以来,pytest django在
pytest_django.asserts
中提供django测试用例中的所有断言。看见
例如。

要测试特定模板是否用于渲染视图,您可以(甚至应该)使用
pytest-django
提供的帮助程序:

import pytest
from pytest_django.asserts import assertTemplateUsed

...

def test_should_use_correct_template_to_render_a_view(client):
    response = client.get('.../your-url/')
    assertTemplateUsed(response, 'template_name.html')

pytest django
甚至在中使用了这个确切的断言作为示例。

我不理解你的问题,你想测试你传递给模板的数据是否正确呈现?@Augustin不,我想测试当我得到一个页面时,它使用的是我希望它使用的模板文件。如果你得到了“页面”那么你得到了模板,如果没有,你得到“页面”是什么意思?你能提供一些代码让我帮你吗?使用的和
\u assert\u template\u的代码显示
中有一个属性
.templates
。因此,您需要类似于
assert response.templates和('mytemplate'在[t.name中代表t in response.templates,如果t.name不是None])
的内容。这是一种解决方法,而不是问题的实际解决方案。您为什么这么说?Django在
assertTemplateUsed()
中就是这么做的。把它包装成一个函数,就这样。您还希望它不是一个“解决方案”吗?也许“解决方案”是一个夸张的说法,但是有一个由
pytest\u django
提供的专用断言。