assertHTMLEqual
Метод assertHTMLEqual применяется к объекту тестового класса TestCase и используется для сравнения двух строк, содержащих HTML-код. Он проверяет, что переданные строки представляют собой эквивалентные HTML-документы, игнорируя различия в пробелах, порядке атрибутов и их кавычках. Это особенно полезно при тестировании представлений, которые возвращают HTML-страницы, поскольку позволяет точно проверить структуру и содержание ответа без учета незначительных форматных различий.
Метод принимает два обязательных аргумента: html1 и html2 - строки для сравнения, а также необязательные параметры: msg для пользовательского сообщения об ошибке и msg_prefix для префикса к стандартному сообщению. Сравнение производится на уровне DOM-дерева, что позволяет учитывать структуру документа, а не только текстовое представление.
Синтаксис
self.assertHTMLEqual(html1, html2, msg=None, msg_prefix='')
Пример
Давайте сравним две HTML-строки с одинаковой структурой, но разным форматированием:
from django.test import TestCase
class HTMLTest(TestCase):
def test_simple_html(self):
html1 = '<div class="container"><h1>Title</h1><p>Content</p></div>'
html2 = '''
<div class="container">
<h1>Title</h1>
<p>Content</p>
</div>
'''
self.assertHTMLEqual(html1, html2)
Результат выполнения кода:
"Test passed - HTML strings are equivalent"
Пример
Давайте сравним HTML-строки с одинаковым содержимым, но разным порядком атрибутов:
from django.test import TestCase
class HTMLAttributeTest(TestCase):
def test_attribute_order(self):
html1 = '<a href="/home/" class="link">Home</a>'
html2 = '<a class="link" href="/home/">Home</a>'
self.assertHTMLEqual(html1, html2)
Результат выполнения кода:
"Test passed - HTML strings are equivalent"
Пример
Давайте проверим неэквивалентные HTML-строки с разной структурой:
from django.test import TestCase
class HTMLFailTest(TestCase):
def test_different_structure(self):
html1 = '<div><span>Text</span></div>'
html2 = '<div><p>Text</p></div>'
self.assertHTMLEqual(html1, html2)
Результат выполнения кода:
"AssertionError: <span>Text</span> != <p>Text</p>"
Пример
Давайте используем метод для проверки HTML-ответа представления:
from django.test import TestCase
from django.urls import reverse
class ViewHTMLTest(TestCase):
def test_view_response(self):
response = self.client.get(reverse('home'))
expected_html = '''
<!DOCTYPE html>
<html>
<head><title>Home</title></head>
<body>
<h1>Welcome</h1>
<p>This is the home page</p>
</body>
</html>
'''
self.assertHTMLEqual(response.content.decode(), expected_html)
Результат выполнения кода:
"Test passed - HTML response matches expected structure"
Смотрите также
-
метод
assertInHTML,
который проверяет наличие фрагмента HTML в другом HTML-коде -
метод
assertContains,
который проверяет наличие текста в ответе представления -
метод
assertJSONEqual,
который сравнивает JSON-строки на эквивалентность -
класс
TestCase,
который предоставляет набор методов для тестирования Django-приложений