With this library, you can run your test suites without having to stop and restore the database in between them.
Currently compatible with:
If you need compatibility with another database, you can request it here.
Install with npm
npm i -D fastypest
To use it, you must have inserted all the seeds beforehand, and before starting the tests, you must initialize it by indicating the typeorm connection configuration. You must execute restoreData after each test, so that the database is returned to its initial state.
Example of use with jest
Note (I recommend using it in a setupFilesAfterEnv file):
beforeAll(async () => {
fastypest = new Fastypest(connection);
await fastypest.init();
});
afterEach(async () => {
await fastypest.restoreData();
});Fastypest uses query-based change detection by default. It tracks SQL that changes data and restores only the affected tables.
const fastypest = new Fastypest(connection, {
changeDetectionStrategy: ChangeDetectionStrategy.None,
});ChangeDetectionStrategy.Queryis the default strategy and inspects SQL flowing through TypeORM.queryexecution to restore only affected tables for supported DML statements.ChangeDetectionStrategy.Nonedisables query tracking and forces full-database restore after each test.
- Supported tracked statements:
INSERT,UPDATE,DELETE,TRUNCATE. - Unsafe schema mutations such as
ALTER,DROP,CREATE, orRENAMEswitch restore to full-database mode for safety. - If Fastypest cannot determine affected tables with confidence, it falls back to full restore to keep deterministic behavior.
Fastypest ships with a Winston-based logger that helps you trace the initialization and restore workflow.
- Logging is disabled by default. Enable it with
logging: trueor provide a detailed configuration. - Use
LoggingDetailLevelto toggle between the simple preset (errors, warnings, notices, info) and the detailed preset (all levels). - Combine
LoggingDetailLevelwith an explicitlevelsarray when you need to focus on specificLogLevelentries.
import { Fastypest, LogLevel, LoggingDetailLevel } from "fastypest";
const fastypest = new Fastypest(connection, {
logging: {
enabled: true,
detail: LoggingDetailLevel.Detailed,
levels: [LogLevel.Info, LogLevel.Debug],
},
});When both detail and levels are provided, Fastypest only prints the intersection of the two filters, keeping the output focused on the events you care about.
This project leverages a sophisticated CI/CD setup using GitHub Actions:
- 🤖 Dependabot PRs are auto-approved only for safe updates (patch/minor or dev-only major updates)
- 🔁 A new release is triggered automatically every 3 commits using a commit counter system
- 📦 When it's time to release, a pull request is automatically created to bump the version
- 👤 The release PR is assigned to the maintainer and auto-approved (if conditions are met)
- ✅ All checks must pass before the PR is merged
- 🚀 After merge, the new version is automatically published to NPM
- 🧪 Before publishing, a full build and installation test is executed to ensure package integrity
This automation ensures high-quality, low-friction delivery while keeping full control over critical updates.
