Catalog npm
Back to packageRELEASE DETAILS

0.4.0

npm

@021.is/spine-testing

Shared test helpers: Testcontainers Postgres (worker-shared), Prisma migrator, JWKS mock server, MSW factory, deterministic time + uuid.

Published28 May 2026
Direct dependencies6
Transitive dependenciesNot calculated

README

Current package documentation

@021.is/spine-testing

Shared test helpers used by every product. Lets every repo's tests/setup.ts look the same.

What's in the box

SubpathPurpose
@021.is/spine-testing/postgresstartSharedPostgres() — Testcontainers PG per Vitest worker. runPrismaMigrate() — apply your schema once. truncateAll() — clean between tests without restart.
@021.is/spine-testing/jwksstartJwksMockServer() — in-process RS256 JWKS endpoint + signToken(). Point your auth middleware at it; no real IdP needed.
@021.is/spine-testing/mswstartMockServer() — MSW for outbound HTTP. Mock Resend / Stripe / R2 / Google.
@021.is/spine-testing/timefreezeTime() + deterministicIds() — stable timestamps + ids for snapshot + rate-limit tests.

Reference setup

// tests/setup.ts
import { beforeAll, afterAll, afterEach } from "vitest";
import { startSharedPostgres, runPrismaMigrate, truncateAll } from "@021.is/spine-testing/postgres";
import { startMockServer } from "@021.is/spine-testing/msw";

let dbUrl: string;
const mocks = startMockServer();

beforeAll(async () => {
  dbUrl = await startSharedPostgres();
  process.env.DATABASE_URL = dbUrl;
  await runPrismaMigrate(dbUrl, { mode: "push" }); // fast for tests
}, 60_000);

afterEach(async () => {
  await truncateAll(dbUrl);
  mocks.reset();
});

afterAll(() => {
  mocks.stop();
  // Postgres container is reaped by Testcontainers on process exit.
});

Why Testcontainers > mocks

The rule: "mocks lie when production diverges." A real Postgres runs your real migrations, executes your real SQL, surfaces real index bugs. The cost (~1.5s per worker cold start) is amortized over the whole suite.

Performance notes

  • Shared container per worker. startSharedPostgres() uses a globalThis slot — one container per Vitest worker process, not per test file.
  • Migrate once, truncate often. runPrismaMigrate() in beforeAll; truncateAll() in afterEach. ~50ms per test after the first.
  • mode: "push" for tests. Skip the migration table and just db push from schema.prisma. Much faster than deploy when you don't need migration history fidelity.
  • CI: shard your tests. vitest run --shard=1/4 × 4 GH Actions matrix jobs = 4× wall clock.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 6

Native requirements
6 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
pg
Environment
{
  "local_name": "pg",
  "alias": false,
  "peer_metadata": null
}
^8.21.0runtime
msw
Environment
{
  "local_name": "msw",
  "alias": false,
  "peer_metadata": null
}
^2.4.11runtime
jose
Environment
{
  "local_name": "jose",
  "alias": false,
  "peer_metadata": null
}
^5.9.6runtime
@types/pg
Environment
{
  "local_name": "@types/pg",
  "alias": false,
  "peer_metadata": null
}
^8.20.0runtime
testcontainers
Environment
{
  "local_name": "testcontainers",
  "alias": false,
  "peer_metadata": null
}
^10.13.2runtime
@testcontainers/postgresql
Environment
{
  "local_name": "@testcontainers/postgresql",
  "alias": false,
  "peer_metadata": null
}
^10.13.2runtime

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "705a9dfe48aa063b708401b47c65b821fa194a03",
  "tarball": "https://registry.npmjs.org/@021.is/spine-testing/-/spine-testing-0.4.0.tgz",
  "fileCount": 18,
  "integrity": "sha512-Prf9SqrsPZVav9Ne+TvfqXV4B7dtFWFR9jFKIVbQ/eSKvWOL6QJTmUgOmGo7vfxaIbbhRwKSoajR8gWMXaocCg==",
  "signatures": [
    {
      "sig": "MEUCIH5dbVOZbE05WvCKqAw3tONDe9ofCFRx/0rPZ4eAhREqAiEAlqVQGNlYPo18daZxJca/J/aMcNnVsYH9E+NUQXHQkE0=",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "unpackedSize": 611678
}

Repository

PENDING
021is/spine-ts

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:00 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:3f70e6dca85428f5026822716129d69b316ec3a58a274e534c5d162dd67acda1

Other collected versions

0.4.328 MayView all collected versions →