vistas urls redireccionar parametros lista importar funciones ejemplos con and python django unit-testing django-views

python - urls - Prueba las vistas de Django que requieren iniciar sesión utilizando RequestFactory



url con parametros django (2)

Soy nuevo en Django y me gustaría probar una vista que requiere que el usuario esté conectado ( @login_requred ). Django amablemente proporciona RequestFactory , que teóricamente puedo utilizar para llamar directamente a la vista:

factory = RequestFactory() request = factory.get("/my/home/url") response = views.home(request)

Sin embargo, la llamada falla con

AttributeError: ''WSGIRequest'' object has no attribute ''session''

Aparentemente, esto es intencional , pero ¿dónde me deja eso? ¿Cómo pruebo las vistas que requieren autenticación (que en mi caso son todas)? ¿O estoy tomando el enfoque equivocado por completo?

Estoy usando Django 1.3 y Python 2.7.


Como se mencionó en @bmihelac, RequestFactory solo prueba las entradas conocidas (lo que significa que no se incluye middleware). Para detalles sobre el razonamiento, lea here . La solución aceptada es excelente si desea una sesión en blanco (y estoy de acuerdo con @ dm03514 en que el Cliente debe usarse para las pruebas de integración).

Sin embargo, si aún desea usar el SessionMiddleware de Django (o cualquier Middleware), puede hacer algo como esto en sus pruebas (el siguiente ejemplo es para probar una Vista basada en clase):

from django.contrib.sessions.middleware import SessionMiddleware from django.test import TestCase, RequestFactory from someapp.views import SomeView # a Class Based View class SomePageTest(TestCase): def setUp(self): self.factory = RequestFactory() def test_some_page_requires_session_middleware(self): # Setup request = self.factory.get(''somepage.html'') middleware = SessionMiddleware() middleware.process_request(request) request.session.save() response = SomeView.as_view()(request) self.assertEqual(response.status_code, 200)


Cuando utiliza RequestFactory, está probando la vista con entradas exactamente conocidas.

Eso permite aislar las pruebas del impacto del procesamiento adicional realizado por varios componentes de middleware instalados y, por lo tanto, pruebas más precisas.

Puede configurar la solicitud con cualquier dato adicional que la función de vista espere, es decir:

request.user = AnonymousUser() request.session = {}

Mi recomendación personal es usar TestClient para realizar pruebas de integración (es decir, el proceso completo de verificación del usuario en la tienda que incluye muchos pasos) y RequestFactory para probar el comportamiento de las funciones de visualización independiente y su salida (es decir, agregar el producto al carrito).