Skip to content
Back to skills

Setup Vitest

ASecurity

Set up Vitest for a TypeScript project, or migrate from Jest. Use for faster test execution, native ESM/TypeScript support, and Jest-compatible API. Covers config, dependency swaps, and test file updates.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 10, 2026
developmenttypescriptgobashapi

Works with

  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned September 10, 2026

npx -y skills add krafteq/infraglue --skill setup-vitest --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Setup Vitest?

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

Security grade badge for Setup Vitest
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/krafteq-setup-vitest/badge)](https://www.skillsdirectory.com/skills/krafteq-setup-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: setup-vitest
description: Set up Vitest for a TypeScript project, or migrate from Jest. Use for faster test execution, native ESM/TypeScript support, and Jest-compatible API. Covers config, dependency swaps, and test file updates.
---

# Set Up Vitest

## Goal

Add Vitest for fast test execution with native ESM and TypeScript support. If migrating from Jest, replace Jest + ts-jest with minimal code changes.

## Why

- Native ESM support (no ts-jest transform overhead)
- Native TypeScript support (no configuration needed)
- 2-5x faster test execution for ESM TypeScript projects
- Jest-compatible API (minimal code changes when migrating)

## Steps

### 1. Install Vitest

```bash
pnpm add -D vitest
```

### 2. Create vitest.config.ts

```ts
import { defineConfig } from 'vitest/config'

export default defineConfig({
  test: {
    globals: true,
    include: ['src/**/*.test.ts'],
  },
})
```

### 3. Update package.json Scripts

```json
{
  "scripts": {
    "test": "vitest run",
    "test:watch": "vitest"
  }
}
```

### 4. Remove Jest (if migrating)

```bash
pnpm remove jest ts-jest @types/jest
```

Also delete `jest.config.*` if it exists.

### 5. Update Test Files (if migrating from Jest)

With `globals: true`, most Jest tests work unchanged. Key differences:

**Mock changes (find and replace):**

```ts
// jest.fn → vi.fn
// jest.mock → vi.mock
// jest.spyOn → vi.spyOn
// jest.clearAllMocks → vi.clearAllMocks
// jest.resetAllMocks → vi.resetAllMocks
// jest.restoreAllMocks → vi.restoreAllMocks
// jest.useFakeTimers → vi.useFakeTimers
```

**Imports (if not using globals):**

```ts
import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest'
```

### 6. TypeScript Config

Add vitest types if using globals:

```json
{
  "compilerOptions": {
    "types": ["vitest/globals"]
  }
}
```

Or create a separate `tsconfig.test.json` that extends the main one.

### 7. Verify

```bash
pnpm test           # All tests pass
pnpm test:watch     # Watch mode works
```

## Gotchas

- Vitest uses esbuild for transforms (fast but no type-checking during tests — use `tsc --noEmit` separately)
- Snapshot files are compatible (`.snap` extension, same as Jest)
- If Jest config uses `moduleNameMapper`, use `resolve.alias` in vitest config instead

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.