Skip to content
Back to Stack Recommender

AVA

AVA — test runner with concurrent tests and minimal API.

TestingModerate

Stack Components

FrameworkAVA 6.x

Why

Tests run in parallel workers, ESM-native, no implicit globals, fast. 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.js libraries needing parallel tests. Avoid for browser tests.

How

1. npm install ava 2. Write test.js with test() 3. npx ava 4. View results 5. Add environment configuration — cp .env.example .env && edit values 6. Run tests — npm test or pnpm test to verify setup 7. Deploy — git push to trigger CI/CD or manual deploy

Example

import test from 'ava'; test('foo', t => { t.is(1 + 1, 2); }); // AVA — usage example import { AVA } from "test2-ava"; const result = await ava({ input: "data" }); console.log(result);

Common Problems

  • ⚠Worker isolation — use serial for shared state
  • ⚠Snapshot — use ava-snapshot
  • ⚠Configuration drift between environments — use infrastructure-as-code (Terraform/Pulumi) to keep dev/staging/prod identical

Best Practices

  • ✓Use t.try for sub-tests
  • ✓Leverage macros for reusable tests
  • ✓Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit

FAQ

What is AVA and what projects is it for?

AVA — test runner with concurrent tests and minimal API. 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 AVA in 10 minutes?

Two steps: (1) npm install ava; (2) Write test.js with 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 AVA and how do I avoid it?

The most common pitfall is: Worker isolation — use serial for shared state. 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 AVA?

Best practices for AVA include: Use t.try for sub-tests; Leverage macros for reusable tests; Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit. The first one — "Use t.try for sub-tests" — should be set up at project init to avoid costly rework later.

When should I NOT choose AVA?

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). AVA shines for mid-to-high complexity full-stack and API work — don't over-engineer simple static pages with it.