Estoy escribiendo pruebas funcionales detalladas para mis vistas para complementar las pruebas unitarias en mis modelos. Es un proyecto de Django y estoy usando el marco de prueba integrado de Django con unittest. Obviamente, una de las cosas importantes a verificar en estas pruebas funcionales es que los permisos están configurados correctamente. Con esto en mente, estoy intentando algo como esto:Detección de errores de permiso en pruebas de django
anonclient = Client()
userclient = Client()
userclient.login(username='test_user', password='test')
adminclient = Client()
adminclient.login(username='test_admin', password='test')
path = "/path/to/my/page"
anonresponse = anonclient.get(path)
userresponse = userclient.get(path)
adminresponse = adminclient.get(path)
tengo que ser capaz de confirmar que el anonclient y userclient fueron ambos negaron el permiso, mientras que el adminclient funcionaba correctamente. Howerver, no puedo encontrar una manera de probar que esto ha sucedido robustamente!
Al principio decidí verificar que la respuesta fuera una redirección 302 (porque se redirecciona un efecto secundario de fallar la comprobación de permisos), pero esto significa que es imposible distinguir la funcionalidad que redirige automáticamente al usuario y un verificación de permisos fallidos (No puedo usar self.assertRedirects (response, url) porque la url de destino puede anularse mediante el parámetro login_url del decorador permission_required en la vista!)
Tal vez debería considerar ampliar el decorador user_passes_test para que agregue una propiedad para el objeto de respuesta si la prueba falla? Esto podría verificarse en las pruebas. De lo contrario, tendré que determinar si la solicitud fue exitosa al verificar si los efectos secundarios de la solicitud se han producido. Hacerlo de esta manera funcionará, pero será extremadamente largo, especialmente con muchos de estos controles.
No me puedo imaginar que soy la primera persona en encontrarse con este problema, ¿cuál es la forma correcta de tratar este problema o qué me he perdido?
Muchas gracias!
Gracias Justin, pero has entendido mal mi pregunta - Necesito comprobar si la posterior obtención es exitosa o si se produce un error de permiso (con la redirección resultante). El inicio de sesión funciona bien - Necesito poder probar que la verificación de permisos funciona en la vista de Django. – adamnfish
Debería poder verificar si la url resultante es a la que intentó acceder. my_url = '/ foo /' resp = c.get (my_url) Luego puede consultar el objeto '' resp'' para ver cosas relacionadas con su página resultante. docs.djangoproject.com/en/dev/topics/testing/# testing-responses Específicamente, código de estado, verificando que se usó la plantilla correcta, etc. ¡Espero que ayude! –
Como dije, me gustaría poder diferenciar entre una vista que sirve una redirección y una vista redireccionada por el usuario que falla una prueba. Soy consciente de que puedo verificar los efectos secundarios u oler la página resultante (de hecho, esto es lo que estoy haciendo por ahora) pero me preguntaba si hay una forma de detectar que el usuario falló una prueba y la vista no fue correr, directamente. Parece que no es así por ahora, así que supongo que enviaré una solicitud de función después de la versión 1.2 o rodaré yo mismo un parche user_passes_test decorator. – adamnfish