AssertionError с assertIn; Django SafeString
Я хочу понять, почему строка, возвращаемая из метода шаблона render_to_string
вызывает непоследовательное тестирование при тестировании способом, использующим self.assertIn()
в приведенном ниже TestCase.
Все проверяемые строки проходят, за исключением "=question_id_1"
и "id=question_id_1"
. Похоже, что существует проблема с добавлением question_id_1
после знака равенства. Чем это можно объяснить?
https://docs.djangoproject.com/en/3.2/topics/templates/#django.template.loader.render_to_string
https://docs.djangoproject.com/en/4.0/ref/utils/#django.utils.safestring.SafeString
class SafeString
Подкласс str, который был специально помечен как "безопасный" (не требующий дополнительного экранирования) для целей вывода HTML.
class TestUserQuestionProfileTemplate(TestCase):
@classmethod
def setUpTestData(cls):
tag1 = Tag.objects.create(name="Tag1")
tag2 = Tag.objects.create(name="Tag2")
user = get_user_model().objects.create_user("ItsNotYou")
profile = Profile.objects.create(user=user)
cls.question = Question.objects.create(
title="Test Question ZZZ",
body="Post content detailing the problem about Test Question ZZZ",
profile=profile
)
cls.question.tags.add(*[tag1, tag2])
cls.template = render_to_string(
"authors/questions.html", {"question": cls.question}
)
def test_template_profile_questions_listing(self):
self.assertIn("=", self.template) <<< pass
self.assertIn("id", self.template) <<< pass
self.assertIn("question_id_1", self.template) << pass
self.assertIn("id=", self.template) <<< pass
self.assertIn("=question_id_1", self.template) << fail
self.assertIn("id=question_id_1", self.template) << fail
Шаблон authors/questions.html
записывается как:
<div id="question_id_{{ question.id }}">
</div>
Вывод self.template
в тесте возвращает:
<div id="question_id_1">
</div>
При выполнении теста он возвращает следующие ошибки утверждения:
self.assertIn("=question_id_1", self.template) AssertionError: '=question_id_1' not found in '\n<div id="question_id_1">\n\n</div>\n'
self.assertIn("id=question_id_1", self.template) AssertionError: 'id=question_id_1' not found in '\n<div id="question_id_1">\n\n</div>\n'