node:test
node:test — built-in Node.js test runner, zero dependencies.
Stack Components
Why
Built into Node, no install, TAP output, supports ESM, subtests. Vitest replaced Jest for Vite projects, running 3x faster with native ESM.
Playwright became the #1 E2E tool in 2024, surpassing Cypress with cross-browser support and auto-waiting.
When
Use for Node 18+ projects. Avoid for browser or complex mocking.
How
Example
Common Problems
- ⚠No mocking — use --experimental-test-isolation
- ⚠Coverage — use node --experimental-test-coverage
- ⚠Configuration drift between environments — use infrastructure-as-code (Terraform/Pulumi) to keep dev/staging/prod identical
Best Practices
- ✓Use describe/it from node:test
- ✓Leverage t.assert for rich assertions
- ✓Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit
FAQ
What is node:test and what projects is it for?
node:test — built-in Node.js test runner, zero dependencies. It pairs layered technologies for end-to-end type safety and out-of-the-box deploys, fitting everything from MVPs to production SaaS.
How do I spin up a working demo with node:test in 10 minutes?
Two steps: (1) Write test.js with node:test; (2) node --test. Get the local dev server running, then wire one real data source to verify the end-to-end loop.
What is the most common pitfall with node:test and how do I avoid it?
The most common pitfall is: No mocking — use --experimental-test-isolation. Avoid it by adding the matching checklist to your PR template and running type-check + lint + unit tests in CI — three gates before merge.
What are the best practices for node:test?
Best practices for node:test include: Use describe/it from node:test; Leverage t.assert for rich assertions; Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit. The first one — "Use describe/it from node:test" — should be set up at project init to avoid costly rework later.
When should I NOT choose node:test?
Pick something else in three cases: (1) the team has zero experience with the core framework and the deadline is tight (learning-curve risk); (2) it's a pure content/marketing site (Astro is lighter); (3) you need very high throughput (>10k RPS) or strict-consistency microservices (Go/Rust). node:test shines for mid-to-high complexity full-stack and API work — don't over-engineer simple static pages with it.