{"id":31157440,"url":"https://github.com/juanjogondev/fastypest","last_synced_at":"2026-04-13T09:02:06.819Z","repository":{"id":75309022,"uuid":"590146397","full_name":"juanjoGonDev/fastypest","owner":"juanjoGonDev","description":"With this library, you can run your test suites without having to stop and restore the database in between them","archived":false,"fork":false,"pushed_at":"2026-04-06T07:40:46.000Z","size":7061,"stargazers_count":6,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-06T09:55:22.518Z","etag":null,"topics":["jest","jest-testing","test","test-automation","testing","testing-library","testing-tools","typeorm"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juanjoGonDev.png","metadata":{"files":{"readme":"README.es.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2023-01-17T18:56:04.000Z","updated_at":"2026-04-06T07:39:19.000Z","dependencies_parsed_at":"2024-01-15T05:46:55.945Z","dependency_job_id":"9b95bdeb-cebc-4401-83ee-ed3b83b1e15d","html_url":"https://github.com/juanjoGonDev/fastypest","commit_stats":null,"previous_names":["juanjogondev/fastypest","juanjo96dev/fastypest"],"tags_count":196,"template":false,"template_full_name":null,"purl":"pkg:github/juanjoGonDev/fastypest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanjoGonDev%2Ffastypest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanjoGonDev%2Ffastypest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanjoGonDev%2Ffastypest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanjoGonDev%2Ffastypest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juanjoGonDev","download_url":"https://codeload.github.com/juanjoGonDev/fastypest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanjoGonDev%2Ffastypest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31746113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T06:26:45.479Z","status":"ssl_error","status_checked_at":"2026-04-13T06:26:44.645Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jest","jest-testing","test","test-automation","testing","testing-library","testing-tools","typeorm"],"created_at":"2025-09-18T22:05:53.019Z","updated_at":"2026-04-13T09:02:06.789Z","avatar_url":"https://github.com/juanjoGonDev.png","language":"TypeScript","funding_links":["https://buymeacoffee.com/juanjogondev"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eFASTYPEST\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Actividad de commits\" src=\"https://img.shields.io/github/commit-activity/m/juanjoGonDev/fastypest\"/\u003e\n  \u003cimg alt=\"Último commit\" src=\"https://img.shields.io/github/last-commit/juanjoGonDev/fastypest\"/\u003e\n  \u003ca href=\"https://www.npmjs.com/fastypest\" target=\"_blank\"\u003e\u003cimg alt=\"Versión en GitHub\" src=\"https://img.shields.io/github/package-json/v/juanjoGonDev/fastypest?logo=github\u0026logoColor=fff\u0026label=GitHub+package\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/fastypest\" target=\"_blank\"\u003e\u003cimg alt=\"Versión en npm\" src=\"https://img.shields.io/npm/v/fastypest?logo=npm\u0026logoColor=fff\u0026label=Paquete+NPM\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/fastypest\" target=\"_blank\"\u003e\u003cimg alt=\"Versión peer typeorm\" src=\"https://img.shields.io/github/package-json/dependency-version/juanjoGonDev/fastypest/peer/typeorm\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/fastypest\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/github/license/juanjoGonDev/fastypest\" alt=\"Licencia del paquete\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/fastypest\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/fastypest\" alt=\"Descargas mensuales\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://buymeacoffee.com/juanjogondev\" target=\"_blank\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Invítame a un café\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n[![en](https://img.shields.io/badge/lang-en-blue.svg)](./README.md)\n\nCon esta librería puedes ejecutar tus tests sin tener que parar y restaurar la base de datos entre ellos.\n\nActualmente compatible con:\n\n- \u003ca href=\"https://www.npmjs.com/fastypest\"\u003e\u003cimg alt=\"MySQL \u003e= v5.7 supported\" src=\"https://img.shields.io/badge/MySQL-%3E%3D5.7-informational\"\u003e\u003c/a\u003e\n- \u003ca href=\"https://www.npmjs.com/fastypest\"\u003e\u003cimg alt=\"MariaDB \u003e= v10.0 supported\" src=\"https://img.shields.io/badge/MariaDB-%3E%3D10.0-yellowgreen\"\u003e\u003c/a\u003e\n- \u003ca href=\"https://www.npmjs.com/fastypest\"\u003e\u003cimg alt=\"Postgres \u003e= v9.0 supported\" src=\"https://img.shields.io/badge/Postgres-%3E%3D9.0-green\"\u003e\u003c/a\u003e\n- \u003ca href=\"https://www.npmjs.com/fastypest\"\u003e\u003cimg alt=\"cockroachDB \u003e= v22.2.0 supported\" src=\"https://img.shields.io/badge/CockroachDB-%3E%3D22.2.0-blue\"\u003e\u003c/a\u003e\n\nSi necesitas soporte para otra base de datos, puedes solicitarlo [aquí](https://github.com/juanjoGonDev/fastypest/issues/new?assignees=juanjoGonDev\u0026labels=enhancement\u0026template=feature.yml).\n\nInstalación:\n\n```\nnpm i -D fastypest\n```\n\nPara 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.\n\nEjemplo de uso con Jest:\n\n\u003e **Nota**\n\u003e (Recomiendo usarlo en [setupFilesAfterEnv](https://jestjs.io/es-ES/docs/configuration#setupfilesafterenv-array)):\n\n```typescript\nbeforeAll(async () =\u003e {\n  fastypest = new Fastypest(connection);\n  await fastypest.init();\n});\n\nafterEach(async () =\u003e {\n  await fastypest.restoreData();\n});\n```\n\n## 🔄 Estrategias de detección de cambios\n\nFastypest usa por defecto la detección de cambios basada en consultas. Rastrea el SQL que modifica datos y restaura únicamente las tablas afectadas.\n\n```typescript\nconst fastypest = new Fastypest(connection, {\n  changeDetectionStrategy: ChangeDetectionStrategy.None,\n});\n```\n\n- `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.\n- `ChangeDetectionStrategy.None` desactiva el rastreo por consultas y fuerza la restauración completa tras cada test.\n\n### Alcance de detección y fallback seguro\n\n- Sentencias soportadas para seguimiento: `INSERT`, `UPDATE`, `DELETE`, `TRUNCATE`.\n- Mutaciones de esquema no seguras como `ALTER`, `DROP`, `CREATE` o `RENAME` fuerzan restauración completa por seguridad.\n- Si Fastypest no puede determinar con confianza las tablas afectadas, aplica fallback a restauración completa para mantener comportamiento determinista.\n\n## 🔍 Registro\n\nFastypest incluye un logger basado en Winston que facilita seguir el flujo de inicialización y restauración.\n\n- El registro está desactivado por defecto. Actívalo con `logging: true` o define una configuración personalizada.\n- Usa `LoggingDetailLevel` para alternar entre el modo simple (errores, avisos, notices e info) y el modo detallado (todos los niveles).\n- Combina `LoggingDetailLevel` con un array `levels` cuando necesites centrarte en niveles concretos de `LogLevel`.\n\n```typescript\nimport { Fastypest, LogLevel, LoggingDetailLevel } from \"fastypest\";\n\nconst fastypest = new Fastypest(connection, {\n  logging: {\n    enabled: true,\n    detail: LoggingDetailLevel.Detailed,\n    levels: [LogLevel.Info, LogLevel.Debug],\n  },\n});\n```\n\nCuando 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.\n\n## ⚙️ Flujo de trabajo automatizado\n\nEste proyecto usa un sistema CI/CD avanzado con GitHub Actions:\n\n- 🤖 Los PR de Dependabot se aprueban automáticamente solo si son actualizaciones seguras (patch/minor o dependencias de desarrollo)\n- 🔁 Se lanza una nueva versión automáticamente cada 3 commits usando un contador\n- 📦 Cuando toca publicar, se crea un pull request automáticamente con el cambio de versión\n- 👤 El PR se asigna al mantenedor y se aprueba automáticamente (si se cumplen las condiciones)\n- ✅ Todos los tests deben pasar antes de hacer merge\n- 🚀 Al fusionarse, la nueva versión se publica automáticamente en NPM\n- 🧪 Antes de publicar, se realiza una prueba de instalación completa para asegurar la integridad del paquete\n\nEste sistema garantiza entregas fiables, frecuentes y sin fricción, manteniendo siempre el control sobre los cambios críticos\n\n## Historial de Estrellas\n\n[![Star History Chart](https://api.star-history.com/svg?repos=juanjoGonDev/fastypest\u0026type=Date)](https://www.star-history.com/#juanjoGonDev/fastypest\u0026Date)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuanjogondev%2Ffastypest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuanjogondev%2Ffastypest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuanjogondev%2Ffastypest/lists"}