sistema - Django: error de prueba en una vista con @login_required
loginview django (3)
Este testcase funciona para mí:
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.test.client import Client
import unittest
class LoginTestCase(unittest.TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user(''john'', ''[email protected]'', ''johnpassword'')
def testLogin(self):
self.client.login(username=''john'', password=''johnpassword'')
response = self.client.get(reverse(''testlogin-view''))
self.assertEqual(response.status_code, 200)
Te sugiero que (si no los utilices ya) uses la función reverse () y el nombre de tus URL. De esta manera, está seguro de que siempre obtiene la URL correcta.
Intento crear una prueba para una vista que está decorada con @login_required, ya que no pude hacerlo funcionar, realicé una prueba simple y todavía no puedo pasarla.
Aquí está el código para la prueba simple y la vista:
def test_login(self):
user = self._create_new_user()
self.assertTrue(user.is_active)
login = self.client.login(username=user.username,
password=self.data[''password1''])
self.failUnless(login, ''Could not log in'')
response = self.client.get(''/accounts/testlogin/'')
self.assertEqual(response.status_code, 200)
@login_required
def testlogin(request):
print ''testlogin !! ''
return HttpResponse(''OK'')
_create_new_user () está guardando al usuario y hay una prueba dentro de ese método para ver que está funcionando.
La prueba falla en response.status_code, devolviendo 302 y la instancia de respuesta es de un HttpResponseRedirect, lo está redirigiendo como si no hubiera iniciado sesión.
¿Cualquier pista? Me falta algo?
Saludos Esteban
Aquí está la respuesta:
Python 2.6.5 realizó un cambio en la forma en que se almacenan las cookies que es sutilmente incompatible con el cliente de prueba. Este problema se ha solucionado en las ramas 1.1.X y troncales, pero la corrección aún no se ha convertido en una versión formal.
Si está utilizando 1.1.X y Python 2.6.5, tendrá problemas con cualquier actividad de prueba que implique cookies. O necesita degradar Python, o usar la rama 1.1.X en lugar de la versión 1.1.1.
Una versión 1.1.2 (que incluirá la solución para el problema que describe) se realizará al mismo tiempo que lanzamos 1.2, con suerte, muy muy pronto.
Atentamente, Russ Magee% -)
OK, tuve que enfrentarme al mismo problema. @resto resolvió mi problema.
crear usuario de esta manera a continuación, permite que el cliente de prueba logre que el usuario inicie sesión y obtenga una respuesta que no sea redirigir (302)
self.user = User.objects.create_user(''john'', ''[email protected]'', ''johnpassword'')