如何测试 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')