Как проверить запрос HTMX Get?
Я работаю с 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. Когда я просматриваю его в браузере, он также работает. Однако он не работает в моих модульных тестах!
Я пытаюсь проверить два различных типа ответов:
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 : Шаблон 'fragment.html' не был шаблоном, использованным для рендеринга ответа. Фактически использовался шаблон(ы): page.html
.
Как мне смоделировать запрос HTMX, чтобы я мог проверить логику моего фрагмента?
Django-HTMX чувствительна к регистру (это поиск по ключу dict). Вы должны установить HX-Request
заголовок с заглавной HX
:
def test_fragment(self):
headers = {'HX-Request': 'true'}
response = self.client.get('/', **headers)
self.assertTemplateUsed(response, 'fragment.html')