Skip to content
Back to skills

Ng22 Vitest

ASecurity

Guides Angular 22 teams to use Vitest for fast, deterministic unit and component testing.

  • 2 stars
  • 0 votes
  • 1 copy
  • 3 views
  • Added September 6, 2026
developmenttypescriptangulartestingapi

Works with

  • api

Security analysis

A100/100

Scanned September 6, 2026

npx -y skills add PavanAnguluri/angular22-agent-skills --skill ng22-vitest --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ng22 Vitest?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ng22 Vitest
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/pavananguluri-ng22-vitest/badge)](https://www.skillsdirectory.com/skills/pavananguluri-ng22-vitest)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ng22-vitest
description: Guides Angular 22 teams to use Vitest for fast, deterministic unit and component testing.
---

# Angular 22 Vitest Testing

Use Vitest for fast feedback loops, deterministic assertions, and lightweight component and service tests. Keep test setup minimal and focus on observable behavior.

## Core Rules

1. Prefer Vitest for unit tests that do not need a full browser runtime.
2. Keep test files colocated with the code they verify when that improves discoverability.
3. Mock only external boundaries such as HTTP, storage, timers, and browser globals.
4. Use `describe`, `it`, `expect`, `vi`, and lifecycle hooks consistently.
5. Favor stable assertions over snapshot-heavy workflows unless snapshots are truly valuable.
6. Use `vitest run` for one-shot CI execution and the watch runner for local iteration.

## Example

```typescript
import { afterEach, describe, expect, it, vi } from 'vitest';

describe('formatPrice', () => {
  afterEach(() => {
    vi.restoreAllMocks();
  });

  it('formats currency deterministically', () => {
    const formatter = vi.fn((value: number) => `USD ${value.toFixed(2)}`);

    expect(formatter(12.5)).toBe('USD 12.50');
    expect(formatter).toHaveBeenCalledWith(12.5);
  });
});
```

## Async and Timers

```typescript
import { describe, expect, it, vi } from 'vitest';

describe('delayed work', () => {
  it('uses fake timers predictably', async () => {
    vi.useFakeTimers();

    const result = new Promise<string>((resolve) => {
      setTimeout(() => resolve('ready'), 1000);
    });

    await vi.advanceTimersByTimeAsync(1000);
    await expect(result).resolves.toBe('ready');

    vi.useRealTimers();
  });
});
```

## Configuration Guidance

- Vitest reads `vite.config.*` by default, so reuse existing Vite configuration when possible.
- Use a dedicated `vitest.config.*` when test-specific settings need to stay separate.
- Keep setup files small and predictable.
- Use browser mode only when a test depends on real browser APIs or visual behavior.

## Testing Style

- Prefer explicit arrange, act, assert structure.
- Keep assertions close to the behavior that matters.
- Use `vi.mock()` sparingly and reset mocks between tests.
- Use snapshots only when the output is stable and structural change matters.
- Use `test.each` or `describe.each` when coverage varies only by input data.

## Best Practices

- Reset spies and mocks between tests to avoid shared state.
- Keep async tests explicit by awaiting the observable result.
- Prefer fake timers for predictable time-based logic.
- Use component tests only for rendered behavior that matters to users.

## Review Checklist

- The test name says what changes if the assertion fails.
- The setup is minimal and local.
- The test runner choice matches the test's risk and scope.
- Mocks do not hide important integration behavior.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.