unitarias test pruebas framework form python django django-testing

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:

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

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)