Метод assertContains
Метод assertContains применяется к экземпляру класса TestCase и проверяет, содержит ли ответ клиента переданное содержимое. Метод принимает обязательные параметры: объект ответа и искомую строку или байтовую строку. Также можно указать количество совпадений, статус-код и другие параметры для более точной проверки. Метод используется для тестирования рендеринга шаблонов и генерации контента представлениями.
Синтаксис
self.assertContains(response, text, count=None, status_code=200, msg_prefix='', html=False)
Параметры
Метод принимает следующие параметры:
response - объект ответа, возвращенный клиентом.
text - строка или байтовая строка, которую нужно найти в ответе.
count - ожидаемое количество совпадений. Если параметр не указан, проверяется наличие хотя бы одного совпадения.
status_code - ожидаемый статус-код ответа. По умолчанию равен 200.
msg_prefix - строка, добавляемая к сообщению об ошибке.
html - если установлен в True, выполняет сравнение как HTML, игнорируя пробелы и регистр тегов.
Пример . Использование
Давайте протестируем представление, которое возвращает список статей в HTML:
from django.test import TestCase
from django.urls import reverse
from myapp.models import Article
class ArticleListViewTest(TestCase):
def setUp(self):
Article.objects.create(title="First Article", content="Content 1")
Article.objects.create(title="Second Article", content="Content 2")
def test_article_list_contains_titles(self):
res = self.client.get(reverse('article_list'))
self.assertContains(res, "First Article")
self.assertContains(res, "Second Article")
Пример . С подсчетом совпадений
Проверим, что определенное слово встречается в ответе указанное количество раз:
from django.test import TestCase
from django.urls import reverse
from myapp.models import Article
class ArticleContentTest(TestCase):
def setUp(self):
Article.objects.create(title="Python Tutorial", content="Python is great")
Article.objects.create(title="Django Guide", content="Django is also great")
def test_content_contains_python_twice(self):
res = self.client.get(reverse('article_list'))
self.assertContains(res, "Python", count=2)
Пример . С проверкой HTML-содержимого
При использовании параметра html=True метод игнорирует различия в пробелах и регистре тегов:
from django.test import TestCase
from django.urls import reverse
class HTMLTest(TestCase):
def test_html_content_ignores_spaces(self):
res = self.client.get(reverse('home'))
self.assertContains(res, "<h1> Welcome</h1>", html=True)
Смотрите также
-
метод
assertNotContains,
который проверяет отсутствие содержимого в ответе -
метод
assertRedirects,
который проверяет редиректы в ответе -
метод
assertTemplateUsed,
который проверяет использование шаблона -
метод
assertInHTML,
который проверяет наличие HTML-фрагмента в ответе