我正在使用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')
在page.html
中,HTMX元素触发了一个GET请求,该请求期望这个片段。它工作了--我的功能测试看到了HTMX请求的结果。当我在浏览器中查看它时,它也工作了。但是,它在我的单元测试中不工作!
我试着测试两种不同类型的React:
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')
test_page
如预期通过,但test_fragment
未通过:
Assert错误:假的不是真的:模板“fragment.html”不是用于呈现响应的模板。使用的实际模板:page.html
如何模拟HTMX请求以便测试我的片段逻辑?
1条答案
按热度按时间b4qexyjb1#
Django-HTMX的头文件检查是区分大小写的(这是一个字典键查找)。你必须将
HX-Request
头文件设置为大写的HX
: