Estoy escribiendo algunas pruebas para mi aplicación django.En mi opinión, redirige a alguna otra URL usando 'HttpResponseRedirect'. Entonces, ¿cómo puedo probar eso?Django: Cómo probar para 'HttpResponsePermanentRedirect'
Respuesta
from django.http import HttpResponsePermanentRedirect
from django.test.client import Client
class MyTestClass(unittest.TestCase):
def test_my_method(self):
client = Client()
response = client.post('/some_url/')
self.assertEqual(response.status_code, 301)
self.assertTrue(isinstance(response, HttpResponsePermanentRedirect))
self.assertEqual(response.META['HTTP_LOCATION'], '/url_we_expect_to_be_redirected_to/')
Existen otros atributos de la respuesta que pueden ser interesantes de probar. Si no está seguro de lo que está en el objeto, entonces siempre se puede hacer una edición
print dir(response)
PARA LAS VERSIONES ACTUALES DE DJANGO
Es un poco más simple ahora, acaba de hacer:
self.assertEqual(response.get('location'), '/url/we/expect')
También te sugiero que uses el reverso para buscar la URL que esperas de un nombre, si es una url en tu aplicación de todos modos.
La última línea arroja un error en Django 1.4: 'AttributeError: 'HttpResponseRedirect' objeto no tiene atributo 'META'' –
Sí, cambiado en 1.4 parece. En su lugar, compararía 'response.get ('location')' con su URL de redirección deseada. – aychedee
El uso de 1.4.5 y META no está disponible en respuesta ??? – simi
La clase Django TestCase
tiene un método assertRedirects
que puede usar.
from django.test import TestCase
class MyTestCase(TestCase):
def test_my_redirect(self):
"""Tests that /my-url/ permanently redirects to /next-url/"""
response = self.client.get('/my-url/')
self.assertRedirects(response, '/next-url/', status_code=301)
El código de estado 301 comprueba que se trata de un redireccionamiento permanente.
¿Funciona esto para cualquiera que use Django '<= 1.5.2'? Parece que he golpeado [este error] (https://bitbucket.org/kmike/django-webtest/issue/8/assertredirects-response-code-was-302). –
@ JonasG.Drange, usted está enlazando a un informe de error para la versión 1.5.2 de la aplicación django-webtest, no a Django en sí. En mi respuesta original, sugerí que pudiera usar 'follow = False' en la solicitud get para evitar que el cliente siga la redirección. Eso fue incorrecto, así que lo eliminé. El método 'assertRedirect' siempre verifica la página de estado, como está documentado. Hay un ticket [# 20919] (https://code.djangoproject.com/ticket/20919) para permitir que 'assertRedirects' no cargue la página de destino. – Alasdair
Eso tiene más sentido. Gracias. –
En Django 1.6, se puede utilizar (no se recomienda ):
from django.test import TestCase
from django.http import HttpResponsePermanentRedirect
class YourTest(TestCase):
def test_my_redirect(self):
response = self.client.get('/url-you-want-to-test/')
self.assertEqual(response.status_code, 301)# premant 301, temporary 302
self.assertTrue(isinstance(response, HttpResponsePermanentRedirect))
self.assertEqual(response.get('location'), 'http://testserver/redirect-url/')
lugar, siguiendo es más potente y concisa y sin necesidad http://testserver/
from django.test import TestCase
class YourTest(TestCase):
def test1(self):
response = self.client.get('/url-you-want-to-test/')
self.assertRedirects(
response, '/redirect-url/',status_code=301,target_status_code=200)
- 1. Cómo probar la unidad con diferentes configuraciones en Django?
- 2. ¿Cómo probar la aplicación django en la subcarpeta?
- 3. Cómo probar modelos en Django con claves externas
- 4. ¿Cómo puedo probar un queryset vacío en Django?
- 5. ¿Cómo probar un formulario con un campo captcha en django?
- 6. Cómo probar el almacenamiento en caché de django?
- 7. ¿Cómo probar las etiquetas de plantilla personalizadas en Django?
- 8. ¿Cuál es la forma limpia de probar FileField en django?
- 9. Cómo usar string.Endswith para probar múltiples terminaciones?
- 10. Cómo probar el webkit para dispositivos móviles
- 11. ¿Cómo usar Mockito para probar mensajes SOAP?
- 12. Cómo probar aplicaciones para iPhone 5
- 13. ¿Cómo probar un protocolo para un método?
- 14. Cómo reiniciar el emulador para probar ACTION_BOOT_COMPLETED?
- 15. ¿Cómo leer una Textura CUDA para probar?
- 16. dispositivos django (de dumpdata) que fallaron al probar
- 17. Forma correcta de probar las señales de Django
- 18. Cómo probar las API
- 19. Probar API REST
- 20. ¿Cómo probar la unidad?
- 21. Cómo probar git hooks
- 22. Junit para probar la concurrencia
- 23. probar una aplicación para Android
- 24. Prueba de la unidad de Django para probar un archivo de descarga
- 25. ¿Cómo puedo probar ModelState?
- 26. Cómo probar android: alwaysRetainTaskState
- 27. Rieles: ¿cómo probar state_machine?
- 28. Scalatest: cómo probar println
- 29. Cómo probar ámbitos?
- 30. Cómo probar wsdl localmente
Podría explicar más? ¿Qué quieres decir exactamente con eso? – Babu