Я новичок в Django и в веб-разработке в целом. Я решил учиться, создав простое веб-приложение для публикации и отображения отзывов о колледжах. У меня есть несколько конечных точек GET и POST, которые я хочу протестировать.
В прошлом я разрабатывал API-интерфейсы, в которых конечные точки возвращали объекты JSON, которые я мог утверждать при тестировании конечных точек API. Однако в этом случае мое приложение Django возвращает HTML.
Первая проблема, с которой я столкнулся, заключалась в том, что мой HTML иногда содержит динамические значения, которые я не могу утверждать. Например, csrf_token, который находится в моих формах. Вот часть HTML-файла для страницы с описанием университета:
...
<form action = "{% url 'university_add_review' university.id %}" method = "post">
{% csrf_token %}
<p>Date:</p><input type = "date" name = "date" id = "date"/>
<p>Summary:</p><textarea name = "summary" id = "summary">Enter your summary here.</textarea>
<input type = "submit" value = "Submit"/>
</form>
...
В своих модульных тестах я хочу проверить, что запрос GET на эту страницу получает правильное содержимое:
def test_get_university_details(self):
response = Client().get('/%s/overview/' % self.university.id)
self.assertEqual(response.content, expected)
Где expected - ожидаемый HTML. Однако это не удается, потому что csrf_token отличается в каждом запросе GET, поэтому у меня нет ожидаемого значения для него. В результате этот тест не проходит:
Traceback (most recent call last):
File ".../tests.py", line 47, in test_get_university_details
self.assertEqual(response.content, expected)
AssertionError: b'\n\[384 chars]ue=\'wrG24VMcdpYYOMECnibQrElP1km9YU0WeOMedGJ2C[488 chars]orm>' != b'\n\[384 chars]ue=\'QWCWACcNQwbfOx9M3iLFt77nSIKhUMiK5i1I4a5mD[530 chars]on> '
Итак, мои два вопроса:






Вы можете использовать self.assertContains(result, "abcd"), чтобы утверждать, что страница содержит заданную строку, как, например, показано здесь
Я не вижу ничего плохого в тестировании содержимого HTML. Ваши представления содержат логику, которая изменяет HTML. Ваши файлы .html также могут содержать логику шаблонов. Это необходимо протестировать вместе с другой частью вашего кода.
Проверьте Главная тестовая страница Django Rest Framework. В нем есть несколько примеров, касающихся аутентификации и добавления поддержки использования формата html в тестовых запросах, которые могут вам помочь.