Catalog npm
PACKAGE EXPLORERView in registry

@021.is/spine-testing

npm

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

Versions collected2
Direct dependencies6From release 0.4.3
Last observed20 Oct, 22:00 UTC

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.

Versions 2

Collected releases
VersionPublishedDirect dependenciesOpen version
0.4.3Registry latest28 May 20266
0.4.028 May 20266

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

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:c92d7823eb58076a546d56848a50dda43663d68b3e856d1b42a7160a16a964bc