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 restores every table by default. You can enable change detection driven by TypeORM subscribers to refresh only the tables touched during a test.
const fastypest = new Fastypest(connection, {
  changeDetectionStrategy: ChangeDetectionStrategy.Subscriber,
});ChangeDetectionStrategy.Nonekeeps the previous behaviour, truncating and restoring every table.ChangeDetectionStrategy.Subscriberlistens to TypeORM subscriber events (insert,update,remove) and restores only the affected tables.
- Use 
fastypest.markTableAsChanged('tableName')after running raw SQL so the table is restored alongside subscriber-detected changes. - When no subscriber event is captured Fastypest falls back to restoring the whole database, ensuring that changes executed exclusively through 
connection.query()are still reverted. - TypeORM subscribers are not triggered by raw queries, so enabling the subscriber strategy requires using repositories or query builders for automatic tracking.
 
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.
