Creación de Sets de Datos Manuales para Pruebas End-to-End

Clase 17 de 25Curso de End to End Testing para APIs REST con Node.js

Resumen

¿Cómo crear un set de datos manual en pruebas end-to-end?

Iniciar y mantener un entorno de pruebas eficiente es fundamental para cualquier desarrollo de software. La implementación de bases de datos de prueba, que puedan ser fácilmente montadas y desmontadas, no solo mejora la calidad del software, sino que también agiliza el proceso de desarrollo y pruebas. En este proceso, es esencial diferenciar entre el entorno de producción y el de pruebas para evitar la pérdida de datos.

¿Cómo estructurar el código?

Lo primero que debemos hacer es crear una carpeta llamada utils dentro del entorno de pruebas end-to-end. En esta carpeta, vamos a incluir funciones de utilidad que nos permitan gestionar nuestros datos de prueba. Crea un archivo llamado set.js, que actuará como la semilla de información.

Dentro de este archivo configuramos dos funciones principales:

  • app: para cargar la semilla de información.
  • down: para limpiarla o "bajarla". Ambas funciones necesitan ser exportables para ser invocadas desde los archivos de prueba.
// Definición de las funciones set y down
exports.app = async () => {
    // Lógica para levantar la semilla de información
};

exports.down = async () => {
    // Lógica para limpiar la información
};

¿Cómo conectar y sincronizar con SQLite?

Ahora, es momento de obtener la conexión a la base de datos. Utilizaremos SQLite directamente para crear y borrar las tablas necesarias y llenar o vaciar la base de datos según necesitemos.

// Importación y sincronización
const sqlite = require('path/to/sqlite');
await sqlite.sync({ force: true });

¿Cómo insertar datos automáticamente?

Para poblaciones prácticas en el set de datos, en vez de ingresar los datos manualmente uno por uno, podemos escribir scripts para automatizar este proceso. Por ejemplo, para insertar un usuario administrador:

// Hash y creación de un usuario administrador
const bcrypt = require('bcrypt');
const hashedPassword = bcrypt.hashSync('adminPassword', 10);

await models.User.create({
    email: 'admin@mail.com',
    password: hashedPassword,
    role: 'admin'
});

Del mismo modo, puedes insertar múltiples elementos en una tabla usando bulkCreate.

// Ejemplo de bulkCreate para categorías
await models.Category.bulkCreate([
    { name: 'Category 1', imageUrl: 'url1.com' },
    { name: 'Category 2', imageUrl: 'url2.com' }
]);

¿Cómo gestionar errores?

Es importante manejar posibles errores durante la inserción de datos para asegurarnos de que nuestros scripts estén funcionando correctamente. Utiliza un try-catch para capturar e identificar errores.

try {
    // Ejecución de la lógica de base de datos
} catch (error) {
    console.log('Error:', error);
}

¿Cómo usar la semilla en pruebas?

Una vez creada la semilla de datos, es crucial integrarla en las pruebas. Importa las funciones app y down en los archivos de prueba y úsalas en los bloques beforeAll y afterAll para cargar y descargar la base de datos respectivamente.

// Uso de la semilla en las pruebas
const { app, down } = require('./utils/set');

beforeAll(async () => {
    await app();
});

afterAll(async () => {
    await down();
});

Recomendaciones para extender tu conjunto de datos

  • Agrega más entidades como productos y clientes, según las necesidades de tus pruebas.
  • Asegúrate de que tus datos de muestra sean representativos y cubran varios casos de prueba.

Con estos pasos, lograrás tener un entorno de pruebas auto-suficiente y fiable que permite iteraciones rápidas y seguras en el desarrollo. ¡Sigue practicando y experimentando para perfeccionar tus habilidades!