Las pruebas unitarias son una parte esencial del desarrollo de software, ya que permiten verificar que las diferentes partes de tu aplicación funcionen correctamente de manera aislada. En este módulo, aprenderás cómo escribir y ejecutar pruebas unitarias para tu aplicación Flask utilizando la biblioteca unittest de Python.

¿Qué son las Pruebas Unitarias?

Las pruebas unitarias son pruebas automatizadas que verifican el comportamiento de una unidad de código, como una función o un método, de manera aislada. El objetivo es asegurarse de que cada unidad de código funcione correctamente por sí sola.

Configuración del Entorno de Pruebas

Antes de comenzar a escribir pruebas unitarias, es importante configurar tu entorno de desarrollo para soportar las pruebas. Asegúrate de tener unittest instalado, aunque viene incluido con Python por defecto.

Instalación de Dependencias

Si aún no lo has hecho, instala Flask-Testing, una extensión que facilita la creación de pruebas para aplicaciones Flask.

pip install Flask-Testing

Estructura de Archivos

Organiza tu proyecto de manera que las pruebas se encuentren en un directorio separado. Una estructura de proyecto típica podría verse así:

my_flask_app/
│
├── app/
│   ├── __init__.py
│   ├── routes.py
│   └── models.py
│
├── tests/
│   ├── __init__.py
│   ├── test_routes.py
│   └── test_models.py
│
├── config.py
├── run.py
└── requirements.txt

Escribiendo Pruebas Unitarias

Creando un Archivo de Pruebas

Crea un archivo llamado test_routes.py dentro del directorio tests/. Este archivo contendrá nuestras pruebas unitarias para las rutas de la aplicación.

Configuración de la Clase de Pruebas

Primero, configura una clase de pruebas que herede de unittest.TestCase. Esta clase se encargará de configurar y limpiar el entorno de pruebas antes y después de cada prueba.

import unittest
from app import create_app

class BasicTests(unittest.TestCase):

    def setUp(self):
        """Configura el entorno de pruebas antes de cada prueba."""
        self.app = create_app('testing')
        self.client = self.app.test_client()
        self.app_context = self.app.app_context()
        self.app_context.push()

    def tearDown(self):
        """Limpia el entorno de pruebas después de cada prueba."""
        self.app_context.pop()

Escribiendo una Prueba Unitaria

Ahora, escribe una prueba unitaria simple para verificar que la página de inicio se carga correctamente.

def test_home_page(self):
    """Prueba que la página de inicio se carga correctamente."""
    response = self.client.get('/')
    self.assertEqual(response.status_code, 200)
    self.assertIn(b'Welcome to My Flask App', response.data)

Explicación del Código

  • setUp: Este método se ejecuta antes de cada prueba. Aquí, creamos una instancia de la aplicación Flask en modo de prueba y configuramos un cliente de pruebas.
  • tearDown: Este método se ejecuta después de cada prueba para limpiar el entorno de pruebas.
  • test_home_page: Esta es una prueba unitaria que envía una solicitud GET a la página de inicio y verifica que el código de estado de la respuesta sea 200 (OK) y que el contenido de la página contenga el texto "Welcome to My Flask App".

Ejecutando las Pruebas

Para ejecutar las pruebas, simplemente usa el siguiente comando en la terminal:

python -m unittest discover -s tests

Este comando buscará y ejecutará todas las pruebas en el directorio tests.

Ejercicio Práctico

Ejercicio 1: Prueba de una Ruta de Usuario

Escribe una prueba unitaria para verificar que la ruta /user/<username> devuelve el nombre de usuario correcto.

Instrucciones

  1. Crea una nueva función de prueba en test_routes.py.
  2. Envía una solicitud GET a la ruta /user/testuser.
  3. Verifica que el código de estado de la respuesta sea 200.
  4. Verifica que el contenido de la respuesta contenga el nombre de usuario "testuser".

Solución

def test_user_page(self):
    """Prueba que la página de usuario se carga correctamente."""
    response = self.client.get('/user/testuser')
    self.assertEqual(response.status_code, 200)
    self.assertIn(b'testuser', response.data)

Ejercicio 2: Prueba de una Ruta de Error

Escribe una prueba unitaria para verificar que una ruta inexistente devuelve un error 404.

Instrucciones

  1. Crea una nueva función de prueba en test_routes.py.
  2. Envía una solicitud GET a una ruta inexistente /nonexistent.
  3. Verifica que el código de estado de la respuesta sea 404.

Solución

def test_404_error(self):
    """Prueba que una ruta inexistente devuelve un error 404."""
    response = self.client.get('/nonexistent')
    self.assertEqual(response.status_code, 404)

Resumen

En esta sección, aprendiste cómo configurar y escribir pruebas unitarias para una aplicación Flask utilizando unittest. Las pruebas unitarias son cruciales para asegurar que cada parte de tu aplicación funcione correctamente de manera aislada. Practica escribiendo más pruebas para diferentes partes de tu aplicación para fortalecer tus habilidades en pruebas unitarias.

En el próximo tema, exploraremos las pruebas de integración, que te permitirán verificar que diferentes partes de tu aplicación funcionen correctamente juntas.

Curso de Desarrollo Web con Flask

Módulo 1: Introducción a Flask

Módulo 2: Conceptos Básicos de Flask

Módulo 3: Formularios y Entrada de Usuario

Módulo 4: Integración de Bases de Datos

Módulo 5: Autenticación de Usuarios

Módulo 6: Conceptos Avanzados de Flask

Módulo 7: APIs RESTful con Flask

Módulo 8: Despliegue y Producción

Módulo 9: Pruebas y Mejores Prácticas

Módulo 10: Extensiones y Ecosistema de Flask

© Copyright 2024. Todos los derechos reservados