python - pruebas - test form django
Django: prueba si la pĆ”gina se redirigiĆ³ a la URL deseada (4)
Django 1.4:
https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.TestCase.assertRedirects
Django 2.0:
SimpleTestCase.assertRedirects(response, expected_url, status_code=302, target_status_code=200, msg_prefix='''', fetch_redirect_response=True)
Afirma que la respuesta devolvió un estado de redireccionamiento de código de estado, redirigido a expected_url (incluidos los datos GET ) y que la página final se recibió con target_status_code .
Si su solicitud utilizó el siguiente argumento, el expected_url y el target_status_code serán el url y el código de estado para el punto final de la cadena de redirección.
Si fetch_redirect_response es False , la página final no se cargará. Dado que el cliente de prueba no puede obtener URL externas, esto es particularmente útil si expected_url no es parte de su aplicación Django.
El esquema se maneja correctamente al hacer comparaciones entre dos URL. Si no se especifica ningún esquema en la ubicación a la que se redirecciona, se utiliza el esquema de la solicitud original. Si está presente, el esquema en expected_url es el que se usa para hacer las comparaciones.
En mi aplicación django, tengo un sistema de autenticación. Entonces, si no me conecto y trato de acceder a la información personal de algún perfil, me redirigen a una página de inicio de sesión.
Ahora, necesito escribir un caso de prueba para esto. Las respuestas de los navegadores que recibo son:
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
¿Cómo escribo mi prueba? Esto es lo que tengo hasta ahora:
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/'')
¿Qué podría venir después?
Puede verificar la response[''Location'']
y ver si coincide con la url esperada. Verifique también que el código de estado sea 302.
También puede seguir la redirección con:
response = self.client.get(''/myprofile/data/some_id/'', follow=True)
lo que reflejaría la experiencia del usuario en el navegador y hará afirmaciones de lo que espera encontrar allí, como por ejemplo:
self.assertContains(response, "You must be logged in", status_code=401)
response[''Location'']
no existe en 1.9. Use esto en su lugar:
response = self.client.get(''/myprofile/data/some_id/'', follow=True)
last_url, status_code = response.redirect_chain[-1]
print(last_url)