django 如何测试HTMX Get请求?

gr8qqesn  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(122)

我正在使用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请求以便测试我的片段逻辑?

b4qexyjb

b4qexyjb1#

Django-HTMX的头文件检查是区分大小写的(这是一个字典键查找)。你必须将HX-Request头文件设置为大写的HX

def test_fragment(self):
    headers = {'HTTP_HX-Request': 'true'}
    response = self.client.get('/', **headers)
    self.assertTemplateUsed(response, 'fragment.html')

相关问题