Trabajar en equipos de desarrollo implica modificar código de otras personas constantemente. Sin pruebas automatizadas, cada cambio puede romper funcionalidades que ya estaban operando correctamente. Django incluye un conjunto completo de herramientas para testing que te permiten verificar que tu aplicación sigue funcionando después de cada modificación.
¿Por qué es fundamental el testing en proyectos Django?
El testing cumple un rol esencial: validar que los cambios que introduces agregan funcionalidades sin dañar lo que ya existía. En una aplicación como un coffee shop, donde listar productos y gestionar órdenes son operaciones críticas, las pruebas unitarias (unit tests) garantizan estabilidad en cada iteración del código.
Django genera automáticamente una base de datos de prueba cada vez que ejecutas los tests. Esto significa que tus datos reales nunca se ven afectados, y cada ejecución parte desde un estado limpio.
¿Cómo crear unit tests para vistas de productos?
Dentro de la aplicación de productos, Django genera un archivo llamado test.py. Ahí es donde se construyen las pruebas [01:17].
¿Cómo verificar que una página carga correctamente?
Se crea una clase que hereda de TestCase y se le asigna el nombre de la vista con el posfijo Test:
python
from django.test import TestCase
from django.urls import reverse
from .models import Product
La clase TestCase proporciona self.client, un cliente HTTP que permite realizar peticiones get, post y otras sin levantar un servidor real [02:15]. Los asserts son métodos que validan si el resultado esperado coincide con el obtenido: igual, diferente, verdadero, falso, entre otros.
Para ejecutar las pruebas se usa el comando python manage.py test [03:00]. Django crea la base de datos de prueba, ejecuta los tests y muestra los resultados.
¿Cómo validar el contexto y los datos de la respuesta?
Una herramienta poderosa de Python para inspeccionar variables durante la ejecución son los breakpoints [04:00]. Al colocar breakpoint() en el código, la ejecución se detiene y abre una shell interactiva llamada PDB (Python Debugger) donde puedes consultar variables:
python
breakpoint()
En PDB puedes escribir:
response.context
response.context['products']
Desde el contexto puedes acceder a la llave products y verificar que el query set esté vacío cuando no se han creado productos [04:45]. Con esta información se construye una prueba más completa:
Después de crear un producto con objects.create, el count debe ser uno [05:50].
¿Cómo probar autenticación y redirecciones en Django?
Otra funcionalidad crítica es verificar que las vistas protegidas redirijan a usuarios no autenticados [06:30]. En la aplicación de órdenes se crea una nueva clase de prueba:
python
from django.test import TestCase
from django.urls import reverse
from django.contrib.auth import get_user_model
get_user_model() es un método de Django que obtiene el modelo de usuario configurado globalmente, especialmente útil cuando se customiza el modelo de usuario [07:50].
self.client.force_login(user) permite autenticar un usuario sin necesidad de contraseña, ideal para pruebas [08:10].
Un usuario no logueado recibe un código 302 (redirección).
Un usuario autenticado recibe un código 200 (página cargada correctamente).
Al ejecutar todas las pruebas con python manage.py test, las cuatro pasan correctamente [09:25], confirmando que tanto el listado de productos como la autenticación funcionan según lo esperado.
Las pruebas unitarias son la red de seguridad que todo proyecto necesita. Te permiten verificar que los cambios no están rompiendo funcionalidades previas y Django facilita este proceso con herramientas integradas desde el primer momento. ¿Ya estás escribiendo pruebas en tus proyectos? Comparte tu experiencia en los comentarios.