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
- Host: GitHub
- URL: https://github.com/juanjogondev/fastypest
- Owner: juanjoGonDev
- License: gpl-3.0
- Created: 2023-01-17T18:56:04.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2026-04-06T07:40:46.000Z (3 months ago)
- Last Synced: 2026-04-06T09:55:22.518Z (3 months ago)
- Topics: jest, jest-testing, test, test-automation, testing, testing-library, testing-tools, typeorm
- Language: TypeScript
- Homepage:
- Size: 6.73 MB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.es.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
FASTYPEST
[](./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:
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
[](https://www.star-history.com/#juanjoGonDev/fastypest&Date)
