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?
  • Как написать тесты для форм в Django?
  • Python mock, django и запросы
  • Как изменить сеанс в тестовой среде Django
  • Тест покрытия Django для URL-адресов 0%, почему?
  • Django LiveServerTestCase: Пользователь, созданный в методе setUpClass, недоступен в test_method?
  • Модели внутри тестов - выпуск Django 1.7
  • Создание образа в памяти для тестирования Django
  • Python - лучший язык программирования в мире.