ОБНОВЛЕНИЕ: меня забрасывают в забвение, но я все еще думаю, что мой ответ лучше, поэтому позвольте мне объяснить.
Я все еще думаю, что есть проблема с ответом Шакера, где вы можете установить follow=True и получить код ответа 200, но не по тому URL-адресу, который вы ожидаете. Например, вы можете неожиданно перенаправиться на страницу входа, подписаться и получить код ответа 200.
Я понимаю, что задал вопрос о том, как что-то сделать с помощью pytest, и причина, по которой меня заминусовали, заключается в том, что я предоставил ответ, используя встроенный класс TestCase Django. Однако правильный ответ для теста в то время был для меня важнее, чем исключительно использование pytest. Как отмечено ниже, мой ответ по-прежнему работает с обнаружением тестов pytest, поэтому я думаю, что ответ все еще действителен. В конце концов, pytest построен на встроенном в Django TestCase. И мой ответ утверждает, что код ответа 200 пришел оттуда, откуда я ожидал.
Лучшим решением было бы изменить pytest, включив expected_url
в качестве параметра. Если кто-то готов сделать это, я думаю, что это было бы большим улучшением. Спасибо за прочтение.
ОРИГИНАЛЬНОЕ СОДЕРЖАНИЕ:
Отвечая на мой собственный вопрос здесь. Я решил включить окончательный ожидаемый URL-адрес с помощью встроенной среды тестирования Django assertRedirects
и убедиться, что он (1) первоначально перенаправляется с ответом 302
и (2) в конечном итоге завершается успешно с кодом 200
по ожидаемому URL-адресу. .
from django.test import TestCase, Client
def test_pytest_works():
assert 1==1
class Test(TestCase):
def test_redirect(self):
client = Client()
response = client.get("/checklist_GTD/archive/")
self.assertRedirects(response, "/expected_redirect/url", 302, 200)
Совет @tdsymonds за то, что указал мне правильное направление. Я оценил ответ Шакера, но я видел в некоторых сценариях результат перенаправления 200
, когда страница перенаправляется на нежелательный URL-адрес. С помощью приведенного выше решения я могу применить URL-адрес перенаправления, который делает pytest-django в настоящее время не поддерживается.
Обратите внимание: этот ответ совместим с функцией автоматического обнаружения pytest-django
и, следовательно, не является несовместимым (он автоматически обнаружит тесты pytest-django и Django TestCase).
person
Scott Skiles
schedule
18.03.2018