Лучшие практики для тестирования представлений в приложении профиля Django?

Я хочу написать несколько тестов для представлений в приложении профиля Django.

У представлений есть умная логика обработки ошибок. например если мы пытаемся создать профиль, а профиль уже существует, то просто перенаправить на страницу существующего профиля (или, может быть, на страницу редактирования профиля).

Как мне проверить, что эта обработка ошибок работает должным образом? Что такое лучшие практики?

Одна из идей состоит в том, чтобы выполнить BDD с помощью Zombie.js и проверить, вижу ли я страницу с заголовком не «Создать профиль» (или, может быть, проверить, что я вижу страницу с заголовком «Редактировать профиль»). Но документы по тестированию Django говорят:

  • Используйте тестовый клиент Django, чтобы убедиться, что вызывается правильное представление и что представление собирает правильные данные контекста.
  • Используйте встроенные в браузер среды, такие как Twill и Selenium, для тестирования отображаемого HTML и поведения веб-страниц, а именно функций JavaScript.

Однако, если я хочу использовать тестовый клиент Django, он может сделать следующее:

  • Моделируйте запросы GET и POST по URL-адресу и наблюдайте за ответом — от низкоуровневого HTTP (заголовки результатов и коды состояния) до содержимого страницы.
  • Проверьте, выполняется ли правильное представление для заданного URL-адреса.
  • Проверьте, что данный запрос обрабатывается заданным шаблоном Django с контекстом шаблона, который содержит определенные значения.

Должен ли я использовать тестовый клиент, а затем посмотреть содержимое страницы? Должен ли я видеть, какой шаблон был обработан? Каков правильный способ проверить это представление?


person Joseph Turian    schedule 30.10.2011    source источник


Ответы (1)


Перенаправления и создание профиля очень похожи на django, поэтому, хотя вы можете использовать другие фреймворки для тестирования функциональности JS, я бы использовал тестовый клиент django для этого экземпляра.

Вы должны решить в каждом конкретном случае, насколько далеко вы продвинетесь со своими тестами. Время ограничено, и некоторые аспекты более подвержены поломке, чем другие. Например, я бы не беспокоился о разрешении шаблона — код состояния 200 и быстрая проверка содержимого вполне достаточны.

Во всяком случае, я бы начал с определения различных состояний представления (я предполагаю здесь):

  • Визуализировать себя (проверить содержимое, шаблон, код состояния и т. д.)
  • Ошибка проверки формы профиля
  • Успех формы профиля: создание профиля: успешное перенаправление
  • Умная обработка ошибок/перенаправление.

Как мне проверить, что эта обработка ошибок работает должным образом?

# create object with specific ID.
# post form data that should trigger your special redirect. 
# ensure the redirect takes you to the model you just created via reverse
response = client.post(reverse('form_url'), {'valid_form_data': ''}, follow=True)
assertRedirects(response, reverse('view_url', args=[id]), target_status_code=200)

Это подтвердит, что правильный профиль перенаправляется на данные, которые, по вашему мнению, должны инициировать это действие.

person Yuji 'Tomita' Tomita    schedule 30.10.2011
comment
Могу ли я использовать assertRedirects вне кода тестирования Django? Я пишу тестовые примеры, используя салат (lettuce.it), потому что это упрощает определение многих тестов, но я не не думаю, что я нахожусь в объекте Django TestCase. - person Joseph Turian; 31.10.2011