如何断言django在pytest中使用某些模板

时间:2017-08-28 20:02:24

标签: python django pytest pytest-django

sorted(sample.items(), key=operator.itemgetter(0)) # ^^^^^^^^ 样式中,我可以通过调用assertTemplateUsed来测试页面是否使用特定模板。这很有用,例如,当Django通过模板插入值时,我不能只测试字符串相等性。

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

我一直在寻找pytest-django,但看不到怎么做。

3 个答案:

答案 0 :(得分:7)

如评论中的phd所述,使用以下内容断言视图中实际上使用了模板文件:

response = client.get(article.get_absolute_url())
assert 'article_detail.html' in [t.name for t in response.templates]

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

import pytest
from django.test import Client
from pytest_django.asserts import assertTemplateUsed

...

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

pytest-django甚至在documentation中以这个确切的断言为例。