Skip to content

Vitest Testing Framework

Niklas Schneider edited this page Jun 30, 2025 · 13 revisions
   ██████╗ ██╗████████╗██████╗  █████╗ ██╗   ██╗
  ██╔════╝ ██║╚══██╔══╝██╔══██╗██╔══██╗╚██╗ ██╔╝
  ██║  ███╗██║   ██║   ██████╔╝███████║ ╚████╔╝ 
  ██║   ██║██║   ██║   ██╔══██╗██╔══██║  ╚██╔╝  
  ╚██████╔╝██║   ██║   ██║  ██║██║  ██║   ██║   
   ╚═════╝ ╚═╝   ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝   ╚═╝   
    Official Wiki of the GitRay Repository!

Back to Home


Table of Contents

Description

Overview of Vitest Testing Framework:

  • Modern testing framework built on top of Vite for fast unit and integration testing.
  • Provides Jest-compatible API with better performance and ES modules support.
  • Configured for both frontend and backend testing in the monorepo using project-based configuration.
  • Includes comprehensive test coverage reporting with v8 provider and coverage merging across projects.
  • Supports TypeScript out of the box with proper type checking and path aliases.
  • Features UI mode for interactive test running and debugging.

Test Commands:

# Run all tests
pnpm test

# Run frontend tests only
pnpm test:frontend

# Run backend tests only
pnpm test:backend

# Run tests in watch mode
pnpm test:watch

# Run tests with coverage
pnpm test:coverage

# Run tests with UI
pnpm test:ui

# Run tests in watch mode for changed files only
pnpm test:watch:changed

Implementation

What does this feature/component exactly do:

  • Vitest serves as the primary testing framework for the entire GitRay project.
  • It runs unit tests, integration tests, and generates coverage reports for both frontend and backend applications.
  • Uses a multi-project setup with separate configurations for frontend (React/JSDOM) and backend (Node.js) environments.
  • Provides coverage merging capabilities to generate unified coverage reports across the monorepo.

What is the trigger of this feature/component:

  • Triggered via pnpm scripts with granular control:
    • test - Run all tests across projects
    • test:frontend / test:backend - Run tests for specific projects
    • test:watch - Watch mode for development
    • test:watch:changed - Watch mode for changed files only
    • test:ui - Interactive UI mode
    • test:coverage - Full coverage workflow with merging and reporting
  • Can be executed manually through command line.
  • Integrated into CI/CD pipelines for automated testing.
  • Watch mode triggers on file changes during development.

What happens with the GUI:

  • Terminal-based interface showing test results, pass/fail status, and coverage metrics.
  • Interactive UI mode available via @vitest/ui for visual test management and debugging.
  • In watch mode, provides interactive interface for filtering and re-running tests.
  • Integrates with VS Code testing extensions for in-editor test running.

What happens in the background/Backend:

  • Compiles TypeScript files on-the-fly using Vite's transformer with path alias resolution.
  • Executes test suites in parallel for better performance across multiple projects using thread pools.
  • Optimizes thread usage to 80% of available CPU cores for efficient resource utilization.
  • Collects code coverage data using v8 provider with comprehensive exclusion patterns.
  • Manages separate test environments (Node.js for backend, JSDOM for frontend).
  • Handles mocking and stubbing of dependencies including DOM APIs.
  • Merges coverage reports from multiple projects using nyc for unified reporting.

Structure

Project path and file name

Vitest Testing Framework:

  • File name: vitest.config.ts
  • Project path: gitray/vitest.config.ts
    • Root workspace configuration managing multi-project setup
  • Project path: gitray/apps/backend/vitest.config.ts
    • Backend-specific configuration with Node.js environment
  • Project path: gitray/apps/frontend/vitest.config.ts
    • Frontend-specific configuration with JSDOM environment and React support

Related files

  1. File name and project path: gitray/tsconfig.json - Root TypeScript configuration
  2. File name and project path: gitray/package.json - Root package with test scripts and dependencies
  3. File name and project path: gitray/apps/frontend/src/test-setup.ts - Frontend test setup with DOM mocking
  4. File name and project path: gitray/apps/backend/__tests__/**/*.test.ts - Backend test files
  5. File name and project path: gitray/apps/frontend/__tests__/**/*.test.tsx - Frontend test files with React components
  6. File name and project path: gitray/apps/backend/package.json - Backend-specific dependencies
  7. File name and project path: gitray/apps/frontend/package.json - Frontend-specific dependencies
  8. File name and project path: gitray/packages/shared-types/src/index.ts - Shared types package with alias resolution

Technology

List of Technologies:

  • Vitest ^3.2.3 - Testing framework with multi-project support
  • @vitest/ui ^3.2.3 - Interactive UI for test management
  • @vitest/coverage-v8 ^3.2.3 - Code coverage provider
  • TypeScript ~5.7.3 - Type-safe testing with full ES modules support
  • Vite ^6.3.5 - Build tool and dev server with fast HMR
  • Node.js - Runtime environment for backend tests
  • JSDOM ^26.1.0 - DOM environment simulation for frontend tests
  • @testing-library/react ^14.3.1 - React component testing utilities
  • @testing-library/jest-dom ^6.6.3 - Additional DOM matchers
  • @testing-library/user-event ^14.6.1 - User interaction simulation
  • @vitejs/plugin-react ^4.4.1 - React support in Vite
  • nyc ^17.1.0 - Coverage report merging and formatting
  • supertest ^7.1.0 - HTTP assertion testing for backend APIs
  • ESM - ES Modules support throughout the project
  • Path aliases - @gitray/shared-types for cross-package imports

UML-Diagrams

Package diagram

Vitest Testing Framework Package Diagram

Activity diagram

Vitest Testing Framework Activity Diagram

Object diagram

Vitest Testing Framework Object Diagram

Class diagram

Vitest Testing Framework Class Diagram

Clone this wiki locally