Метод assertInHTML
Метод assertInHTML применяется к экземпляру класса TestCase
и проверяет, содержится ли переданный HTML-фрагмент в полученном
ответе от клиента. Этот метод учитывает структуру HTML-документа,
игнорируя при этом пробелы, переносы строк и другие незначительные
различия в форматировании. В случае отсутствия фрагмента или
несовпадения структуры, метод выбрасывает исключение с подробным
сообщением об ошибке.
Метод принимает два обязательных аргумента: html - HTML-фрагмент,
который нужно найти, и response - объект ответа от клиента.
Третий необязательный аргумент msg_prefix позволяет добавить
префикс к сообщению об ошибке для лучшей идентификации теста.
Метод полезен для проверки наличия конкретных элементов на странице,
например, форм, кнопок, заголовков или сообщений об ошибках.
Синтаксис
self.assertInHTML(html, response, msg_prefix=None)
Пример . С проверкой заголовка
Проверим, что страница содержит заголовок первого уровня с текстом "Welcome to Blog":
from django.test import TestCase
from django.urls import reverse
class HomePageTest(TestCase):
def test_homepage_contains_heading(self):
response = self.client.get(reverse('home'))
self.assertInHTML('<h1>Welcome to Blog</h1>', response)
Пример . С проверкой ссылки
Проверим наличие ссылки для перехода на страницу входа с определенными атрибутами:
from django.test import TestCase
from django.urls import reverse
class NavigationTest(TestCase):
def test_nav_has_login_link(self):
response = self.client.get(reverse('home'))
login_link = '<a href="/login/" class="nav-link">Login</a>'
self.assertInHTML(login_link, response)
Пример . С проверкой формы
Проверим наличие формы с определенными полями и кнопкой отправки:
from django.test import TestCase
from django.urls import reverse
class ContactFormTest(TestCase):
def test_contact_page_has_form(self):
response = self.client.get(reverse('contact'))
form_html = '''
<form method="post" action="/contact/">
<input type="text" name="name" placeholder="Your name">
<input type="email" name="email" placeholder="Your email">
<textarea name="message" placeholder="Your message"></textarea>
<button type="submit">Send message</button>
</form>
'''
self.assertInHTML(form_html, response)
Пример . С проверкой ошибки валидации
Проверим, что при некорректной отправке формы на странице появляется сообщение об ошибке:
from django.test import TestCase
from django.urls import reverse
class RegistrationTest(TestCase):
def test_invalid_registration_shows_error(self):
data = {'username': '', 'password': '123'}
response = self.client.post(reverse('register'), data)
error_message = '<ul class="errorlist"><li>This field is required.</li></ul>'
self.assertInHTML(error_message, response)
Пример . С проверкой в контексте
Проверим, что страница содержит несколько элементов, сгенерированных из контекста шаблона:
from django.test import TestCase
from django.urls import reverse
from myapp.models import Article
class ArticleListTest(TestCase):
@classmethod
def setUpTestData(cls):
cls.article1 = Article.objects.create(title='First article')
cls.article2 = Article.objects.create(title='Second article')
def test_article_list_contains_articles(self):
response = self.client.get(reverse('article_list'))
self.assertInHTML('<li>First article</li>', response)
self.assertInHTML('<li>Second article</li>', response)
Смотрите также
-
метод
assertContains,
который проверяет наличие текста в ответе -
метод
assertNotContains,
который проверяет отсутствие текста в ответе -
метод
assertHTMLEqual,
который сравнивает два HTML-документа на равенство -
класс
Client,
который используется для эмуляции запросов в тестах