Django: тестирование, если страница перенаправлена ​​на нужный URL-адрес

В моем приложении django у меня есть система аутентификации. Итак, если я не вхожу в систему и не пытаюсь получить доступ к личной информации какого-либо профиля, я перенаправляюсь на страницу входа.

Теперь мне нужно написать тестовый пример. Ответы от браузеров, которые я получаю, это:

GET /myprofile/data/some_id/ HTTP/1.1 302 0 GET /account/login?next=/myprofile/data/some_id/ HTTP/1.1 301 0 GET /account/login?next=/myprofile/data/some_id/ HTTP/1.1 200 6533 

Как написать свой тест? Это то, что я до сих пор:

 self.client.login(user="user", password="passwd") response = self.client.get('/myprofile/data/some_id/') self.assertEqual(response.status,200) self.client.logout() response = self.client.get('/myprofile/data/some_id/') 

что может произойти дальше?

4 Solutions collect form web for “Django: тестирование, если страница перенаправлена ​​на нужный URL-адрес”

Django 1.4:

https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.TestCase.assertRedirects

Django 1.7:

https://docs.djangoproject.com/en/1.7/topics/testing/tools/#django.test.SimpleTestCase.assertRedirects

SimpleTestCase.assertRedirects(response, expected_url, status_code=302, target_status_code=200, host=None, msg_prefix='', fetch_redirect_response=True)

Утверждает, что ответ возвратил статус перенаправления status_code , перенаправленный на expected_url (включая любые данные GET ) и что окончательная страница была получена с помощью target_status_code .

Если ваш запрос использовал следующий аргумент, ожидаемый_url и target_status_code будет URL-адресом и кодом состояния для конечной точки цепочки перенаправления.

Аргумент host задает хост по умолчанию, если expected_url не включает его (например, "/bar/" ). Если expected_url является абсолютным URL-адресом, который включает в себя хост (например, "http://testhost/bar/" ), параметр хоста будет проигнорирован. Обратите внимание, что тестовый клиент не поддерживает выборку внешних URL-адресов, но этот параметр может быть полезен, если вы тестируете с помощью настраиваемого хоста HTTP (например, инициализируя тестовый клиент с помощью Client (HTTP_HOST = «testhost») .

Вы также можете выполнить перенаправление с помощью:

 response = self.client.get('/myprofile/data/some_id/', follow=True) 

который будет отражать пользовательский опыт в браузере и делать утверждения о том, что вы ожидаете найти там, например:

 self.assertContains(response, "You must be logged in", status_code=401) 

Вы можете проверить response['Location'] и посмотреть, соответствует ли он ожидаемому URL-адресу. Проверьте также, что код состояния равен 302.

response['Location'] не существует в 1.9. Используйте это вместо этого:

 response = self.client.get('/myprofile/data/some_id/', follow=True) last_url, status_code = response.redirect_chain[-1] print(last_url) 
  • Тестирование отправки электронной почты
  • Как проверить Django QuerySets равны?
  • Ошибка приложения django test - получена ошибка при создании тестовой базы данных: разрешение отклонено для создания базы данных
  • Загрузка SQL-дампа перед запуском тестов Django
  • Как сохранить тестовые данные после завершения тестов Django?
  • Модели внутри тестов - выпуск Django 1.7
  • Разница между django-webtest и селеном
  • Проверка Django: проверьте начальное значение поля формы
  • Python mock, django и запросы
  • Как изменить сеанс в тестовой среде Django
  • Создание образа в памяти для тестирования Django
  • Python - лучший язык программирования в мире.