Ejemplo de pruebas unitarias en Django Rest Framework
Claro, aquí te brindo un ejemplo práctico de cómo implementar pruebas unitarias en Django Rest Framework en Python. Supongamos que tenemos una API que gestiona un conjunto de tareas a realizar. Y queremos probar que la API responde correctamente a las solicitudes GET, POST, PUT y DELETE. Para ello, creamos un archivo de pruebas llamado tests.py en nuestro directorio de aplicaciones. Luego, importamos las bibliotecas necesarias y definimos una clase de prueba TaskApiTestCase que se encargará de enviar diferentes solicitudes HTTP y verificar las respuestas correspondientes. Aquí hay un ejemplo de cómo se vería:
from django.test import TestCase
from rest_framework.test import APIClient
from .models import Task
class TaskApiTestCase(TestCase):
''' Clase para probar la API de tareas '''
def setUp(self):
self.client = APIClient()
# Creamos algunas tareas para las pruebas
self.task1 = Task.objects.create(
title='Tarea 1',
description='Descripción de la tarea 1',
completed=False
)
self.task2 = Task.objects.create(
title='Tarea 2',
description='Descripción de la tarea 2',
completed=True
)
def test_get_tasks_list(self):
# Verificamos que la API responda correctamente a la solicitud GET para obtener la lista de tareas
response = self.client.get('/tasks/')
self.assertEqual(response.status_code, 200)
def test_get_task_detail(self):
# Verificamos que la API responda correctamente a la solicitud GET para obtener el detalle de una tarea
response = self.client.get('/tasks/{}/'.format(self.task1.id))
self.assertEqual(response.status_code, 200)
def test_create_task(self):
# Verificamos que la API responda correctamente a la solicitud POST para crear una nueva tarea
data = {'title': 'Tarea 3', 'description': 'Descripción de la tarea 3', 'completed': False}
response = self.client.post('/tasks/', data)
self.assertEqual(response.status_code, 201)
def test_update_task(self):
# Verificamos que la API responda correctamente a la solicitud PUT para actualizar una tarea existente
data = {'completed': True}
response = self.client.put('/tasks/{}/'.format(self.task1.id), data, format='json')
self.assertEqual(response.status_code, 200)
def test_delete_task(self):
# Verificamos que la API responda correctamente a la solicitud DELETE para eliminar una tarea existente
response = self.client.delete('/tasks/{}/'.format(self.task2.id))
self.assertEqual(response.status_code, 204)
En este ejemplo, hemos creado una clase de prueba TaskApiTestCase que hereda de django.test.TestCase. En el método setUp() creamos un cliente de API, y algunas tareas de prueba para usar durante las pruebas. Luego, hemos definido cinco métodos de prueba que envían diferentes solicitudes HTTP a la API y verifican que las respuestas sean las esperadas. Por ejemplo, el método test_get_tasks_list() envía una solicitud GET a /tasks/ y verifica que la respuesta tenga un código de estado HTTP 200. Finalmente, para ejecutar las pruebas, solo necesitamos usar el comando python manage.py test en la terminal. Por ejemplo, python manage.py test tasks para probar la API de tareas.