如何测试 HTMX Get 请求?
How to test an HTMX Get request?
我正在使用 Django 和 HTMX。我的一个视图收到一个 GET 请求并且 return 是整个页面。但是,如果该 GET 请求来自 HTMX 元素,则视图将 return 片段:
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 请求的结果。当我在浏览器中查看它时,它也有效。不过,它在我的单元测试中不起作用!
我正在尝试测试两种不同类型的响应:
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
失败:
AssertionError: False is not true : Template 'fragment.html' was not a template used to render the response. Actual template(s) used: page.html
如何模拟 HTMX 请求以便测试片段逻辑?
Django-HTMX's header checking is case sensitive (it's a dict key lookup). You have to set HX-Request
header 大写 HX
:
def test_fragment(self):
headers = {'HX-Request': 'true'}
response = self.client.get('/', **headers)
self.assertTemplateUsed(response, 'fragment.html')
我正在使用 Django 和 HTMX。我的一个视图收到一个 GET 请求并且 return 是整个页面。但是,如果该 GET 请求来自 HTMX 元素,则视图将 return 片段:
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 请求的结果。当我在浏览器中查看它时,它也有效。不过,它在我的单元测试中不起作用!
我正在尝试测试两种不同类型的响应:
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
失败:
AssertionError: False is not true : Template 'fragment.html' was not a template used to render the response. Actual template(s) used: page.html
如何模拟 HTMX 请求以便测试片段逻辑?
Django-HTMX's header checking is case sensitive (it's a dict key lookup). You have to set HX-Request
header 大写 HX
:
def test_fragment(self):
headers = {'HX-Request': 'true'}
response = self.client.get('/', **headers)
self.assertTemplateUsed(response, 'fragment.html')