An open API service indexing awesome lists of open source software.

https://github.com/juanjogondev/fastypest

With this library, you can run your test suites without having to stop and restore the database in between them
https://github.com/juanjogondev/fastypest

jest jest-testing test test-automation testing testing-library testing-tools typeorm

Last synced: 2 months ago
JSON representation

With this library, you can run your test suites without having to stop and restore the database in between them

Awesome Lists containing this project

README

          

FASTYPEST



Actividad de commits
Último commit
Versión en GitHub
Versión en npm
Versión peer typeorm
Licencia del paquete
Descargas mensuales



Invítame a un café

[![en](https://img.shields.io/badge/lang-en-blue.svg)](./README.md)

Con esta librería puedes ejecutar tus tests sin tener que parar y restaurar la base de datos entre ellos.

Actualmente compatible con:

- MySQL >= v5.7 supported
- MariaDB >= v10.0 supported
- Postgres >= v9.0 supported
- cockroachDB >= v22.2.0 supported

Si necesitas soporte para otra base de datos, puedes solicitarlo [aquí](https://github.com/juanjoGonDev/fastypest/issues/new?assignees=juanjoGonDev&labels=enhancement&template=feature.yml).

Instalación:

```
npm i -D fastypest
```

Para usarlo, debes insertar todos los seeds antes de iniciar los tests, y antes de iniciar los tests, debes inicializarlo indicando la configuración de la conexión de typeorm. Debes ejecutar restoreData después de cada test, para que la base de datos se devuelva a su estado inicial.

Ejemplo de uso con Jest:

> **Nota**
> (Recomiendo usarlo en [setupFilesAfterEnv](https://jestjs.io/es-ES/docs/configuration#setupfilesafterenv-array)):

```typescript
beforeAll(async () => {
fastypest = new Fastypest(connection);
await fastypest.init();
});

afterEach(async () => {
await fastypest.restoreData();
});
```

## 🔄 Estrategias de detección de cambios

Fastypest usa por defecto la detección de cambios basada en consultas. Rastrea el SQL que modifica datos y restaura únicamente las tablas afectadas.

```typescript
const fastypest = new Fastypest(connection, {
changeDetectionStrategy: ChangeDetectionStrategy.None,
});
```

- `ChangeDetectionStrategy.Query` es la estrategia por defecto e inspecciona el SQL que pasa por `.query` de TypeORM para restaurar solo las tablas afectadas en sentencias DML soportadas.
- `ChangeDetectionStrategy.None` desactiva el rastreo por consultas y fuerza la restauración completa tras cada test.

### Alcance de detección y fallback seguro

- Sentencias soportadas para seguimiento: `INSERT`, `UPDATE`, `DELETE`, `TRUNCATE`.
- Mutaciones de esquema no seguras como `ALTER`, `DROP`, `CREATE` o `RENAME` fuerzan restauración completa por seguridad.
- Si Fastypest no puede determinar con confianza las tablas afectadas, aplica fallback a restauración completa para mantener comportamiento determinista.

## 🔍 Registro

Fastypest incluye un logger basado en Winston que facilita seguir el flujo de inicialización y restauración.

- El registro está desactivado por defecto. Actívalo con `logging: true` o define una configuración personalizada.
- Usa `LoggingDetailLevel` para alternar entre el modo simple (errores, avisos, notices e info) y el modo detallado (todos los niveles).
- Combina `LoggingDetailLevel` con un array `levels` cuando necesites centrarte en niveles concretos de `LogLevel`.

```typescript
import { Fastypest, LogLevel, LoggingDetailLevel } from "fastypest";

const fastypest = new Fastypest(connection, {
logging: {
enabled: true,
detail: LoggingDetailLevel.Detailed,
levels: [LogLevel.Info, LogLevel.Debug],
},
});
```

Cuando defines `detail` y `levels` al mismo tiempo, Fastypest solo imprime la intersección de ambos filtros para mantener el registro enfocado en los eventos relevantes.

## ⚙️ Flujo de trabajo automatizado

Este proyecto usa un sistema CI/CD avanzado con GitHub Actions:

- 🤖 Los PR de Dependabot se aprueban automáticamente solo si son actualizaciones seguras (patch/minor o dependencias de desarrollo)
- 🔁 Se lanza una nueva versión automáticamente cada 3 commits usando un contador
- 📦 Cuando toca publicar, se crea un pull request automáticamente con el cambio de versión
- 👤 El PR se asigna al mantenedor y se aprueba automáticamente (si se cumplen las condiciones)
- ✅ Todos los tests deben pasar antes de hacer merge
- 🚀 Al fusionarse, la nueva versión se publica automáticamente en NPM
- 🧪 Antes de publicar, se realiza una prueba de instalación completa para asegurar la integridad del paquete

Este sistema garantiza entregas fiables, frecuentes y sin fricción, manteniendo siempre el control sobre los cambios críticos

## Historial de Estrellas

[![Star History Chart](https://api.star-history.com/svg?repos=juanjoGonDev/fastypest&type=Date)](https://www.star-history.com/#juanjoGonDev/fastypest&Date)