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'

Вернуться на верх