Requisitos

1

Pruebas End-to-End para APIs con Node.js y Express

Introducción: pruebas e2e con Node.js

2

Pruebas de API con Insomnia y Postman: Exploración y Configuración

3

Pruebas Unitarias en Node.js con Jest y SQLite

4

Configuración de Jest para Pruebas End-to-End en JavaScript

5

Pruebas E2E en Node.js con Supertest y Express

6

Pruebas Unitarias Efectivas con Jest y Buenas Prácticas

Pruebas a la API de Fake Store

7

Configuración de pruebas E2E en Node.js con Twen.js

8

Generación de Reporte de Cobertura con Pruebas End-to-End

9

Pruebas de validación de datos con DTOs y Joy en Node.js

10

Pruebas End-to-End para APIs con Base de Datos Real

11

Pruebas End-to-End con Jest y Supertest en Node.js

12

Pruebas de API: Autenticación con Headers y API Key

13

Pruebas de Rutas Protegidas con Access Token en Node.js

14

Pruebas Efectivas de Endpoints y Bases de Datos en Proyectos POS

Pruebas en Entornos de Desarrollo Avanzados

15

Pruebas End-to-End con Semillas de Datos en APIs

16

Configuración Docker para Pruebas: Base de Datos Postgres

17

Semillas de Información en SQLite para Pruebas End-to-End

18

Creación de sets de datos en SQLite: Uso y organización efectiva

19

Automatización de Seed Data con Unsock en Entornos de Pruebas

20

Pruebas de JWT y Roles en Node.js

21

Pruebas E2E en Node.js para APIs RESTful

22

Pruebas de Paginación con Query Params en Endpoints de API

Mocking y automatización

23

Mocking de Servicios Externos con NodeMailer

24

Automatización de Pruebas con GitHub Actions y Node.js

Próximos pasos

25

Pruebas Punto a Punto con Node.js para APIs

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Semillas de Información en SQLite para Pruebas End-to-End

17/25
Recursos

¿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: '[email protected]',
    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!

Aportes 2

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

puedo usar el seeder de pruebas que ya tengo configurado?
Por si alguien más le pasa que la prueba de crear un usuario le falla, esto fue lo que hice para que funcionara: en el archivo user.dto.js modifiqué createUserDto para aceptar el campo de 'role': ```javascript const createUserDto = Joi.object({ email: email.required(), password: password.required(), role: role.optional() }); ``` Y creo que me faltaba poner 'await' en mi prueba de users.e2e.js: ```javascript test('should return a new user', async () => { const inputData = { email: '[email protected]', password: 'angel12345', role: 'admin', }; const { statusCode, body } = await api.post(apiUrlBase).send(inputData); expect(statusCode).toBe(201); //check DB const user = await models.User.findByPk(body.id); expect(user).toBeTruthy(); expect(user.role).toEqual('admin'); expect(user.email).toEqual(inputData.email); }); ``` espero les sirva