Testing in TypeScript with Vitest

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

What is Vitest and why is it needed?

Vitest is a modern library for unit testing, focused on the Vite and TypeScript ecosystem. It is created as a fast alternative to Jest, but with full TypeScript support "out of the box" without additional configuration. Vitest uses the native TypeScript parser and Vite's module system, making tests instant even in large projects.

Installation

Install Vitest in your TypeScript project via npm:

npm install -D vitest

Additionally, if you are using React or Vue, install the related utilities:

npm install -D @testing-library/react @testing-library/jest-dom

Main Features

  • Speed: tests run in parallel using workers, speeding up execution up to 10 times compared to Jest.
  • TypeScript Compatibility: does not require ts-jest or babel — works directly with .ts and .tsx files.
  • Built-in Mocks and Spies: functions vi.mock, vi.spyOn, and vi.fn for code isolation.
  • Snapshot Testing: ability to save and compare snapshots of components or data.
  • Coverage: built-in support for c8 or istanbul for code coverage reports.

Code Example in TypeScript

Let's write a test for a simple addition function:

// math.tsexport function add(a: number, b: number): number {  return a + b;}

// math.test.tsimport { describe, it, expect } from 'vitest';import { add } from './math';

describe('add function', () => { it('should add two positive numbers', () => { expect(add(2, 3)).toBe(5); });

it('should handle negative numbers', () => { expect(add(-1, 1)).toBe(0); });

it('should return zero for zero arguments', () => { expect(add(0, 0)).toBe(0); });});

Running the tests:

npx vitest

Vitest will automatically find all files with the .test.ts or .spec.ts extension.

When to Use

Vitest is ideal for:

  • New projects on Vite: instant integration without configuration.
  • Migration from Jest: Vitest has a similar API, making the transition easier.
  • Testing TypeScript libraries: full support for decorators, generics, and complex types.
  • CI/CD pipelines: high execution speed saves time in automated builds.

Avoid Vitest if your project requires older versions of Node.js (below 14) or you use specific Jest plugins incompatible with Vite.

Conclusion

Vitest is a modern, fast, and TypeScript-friendly testing tool. It eliminates many shortcomings of Jest, such as slow startup and complex TypeScript configuration. If you work with TypeScript and value development speed, Vitest will be an excellent choice.

Recommendations