dsc*_*ose 5 testing django tdd http htmx
我正在使用 Django 和 HTMX。我的一个视图收到 GET 请求并返回整个页面。但是,如果该 GET 请求来自 HTMX 元素,则视图将返回一个片段:
from django.shortcuts import render
def view_example(request):
if request.htmx:
return render(request, 'fragment.html')
else:
return render(request, 'page.html')
Run Code Online (Sandbox Code Playgroud)
在page.htmlHTMX 元素中触发需要此片段的 GET 请求。它有效 - 我的功能测试看到 HTMX 请求的结果。当我在浏览器中查看它时,它也有效。但它在我的单元测试中不起作用!
我正在尝试测试两种不同类型的响应:
from django.test import TestCase
class TestRequests(TestCase):
def test_page(self):
response = self.client.get('/')
self.assertTemplateUsed(response, 'page.html')
def test_fragment(self):
headers = {'Hx-Request': 'true'}
response = self.client.get('/', **headers)
self.assertTemplateUsed(response, 'fragment.html')
Run Code Online (Sandbox Code Playgroud)
test_page按预期通过,但test_fragment失败:
AssertionError:False 不是 true:模板“fragment.html”不是用于呈现响应的模板。实际使用的模板:page.html
如何模拟 HTMX 请求以便测试我的片段逻辑?
Django-HTMX的标头检查区分大小写(它是字典键查找)。您必须使用大写设置HX-Request标题HX:
def test_fragment(self):
headers = {'HTTP_HX-Request': 'true'}
response = self.client.get('/', **headers)
self.assertTemplateUsed(response, 'fragment.html')
Run Code Online (Sandbox Code Playgroud)