Current collected state Current
Observed since 20 Oct, 22:00 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
@021.is/spine-testing
Shared test helpers: Testcontainers Postgres (worker-shared), Prisma migrator, JWKS mock server, MSW factory, deterministic time + uuid.
Shared test helpers used by every product. Lets every repo's tests/setup.ts look the same.
| Subpath | Purpose |
|---|---|
@021.is/spine-testing/postgres | startSharedPostgres() — Testcontainers PG per Vitest worker. runPrismaMigrate() — apply your schema once. truncateAll() — clean between tests without restart. |
@021.is/spine-testing/jwks | startJwksMockServer() — in-process RS256 JWKS endpoint + signToken(). Point your auth middleware at it; no real IdP needed. |
@021.is/spine-testing/msw | startMockServer() — MSW for outbound HTTP. Mock Resend / Stripe / R2 / Google. |
@021.is/spine-testing/time | freezeTime() + deterministicIds() — stable timestamps + ids for snapshot + rate-limit tests. |
// 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.
});
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.
startSharedPostgres() uses a globalThis slot — one container per Vitest worker process, not per test file.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.vitest run --shard=1/4 × 4 GH Actions matrix jobs = 4× wall clock.Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
pgEnvironment{
"local_name": "pg",
"alias": false,
"peer_metadata": null
} | ^8.21.0 | runtime |
mswEnvironment{
"local_name": "msw",
"alias": false,
"peer_metadata": null
} | ^2.4.11 | runtime |
joseEnvironment{
"local_name": "jose",
"alias": false,
"peer_metadata": null
} | ^5.9.6 | runtime |
@types/pgEnvironment{
"local_name": "@types/pg",
"alias": false,
"peer_metadata": null
} | ^8.20.0 | runtime |
testcontainersEnvironment{
"local_name": "testcontainers",
"alias": false,
"peer_metadata": null
} | ^10.13.2 | runtime |
@testcontainers/postgresqlEnvironment{
"local_name": "@testcontainers/postgresql",
"alias": false,
"peer_metadata": null
} | ^10.13.2 | runtime |
Source distribution
{
"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
}Observed since 20 Oct, 22:00 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:3f70e6dca85428f5026822716129d69b316ec3a58a274e534c5d162dd67acda1