The-DevOps-Daily/devops-daily

feat: Increase component test coverage

Open

#544 aperta il 2 dic 2025

Vedi su GitHub
 (0 commenti) (0 reazioni) (0 assegnatari)TypeScript (392 fork)github user discovery
enhancementgood first issuehacktoberfest

Metriche repository

Star
 (1087 star)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

Description

Increase test coverage by adding unit tests for React components. Currently, only validation tests exist (11 test files, 4316 tests).

Current Test Coverage

  • ✅ Excellent: Data validation tests
  • ✅ Excellent: Markdown validation
  • ✅ Excellent: Content quality checks
  • ❌ Missing: Component unit tests
  • ❌ Missing: Hook tests
  • ❌ Missing: Utility function tests

Components Needing Tests (Priority Order)

High Priority

  1. components/games/quiz-manager.tsx - Quiz card rendering
  2. components/game-card.tsx - Game card component
  3. components/code-block.tsx - Syntax highlighting
  4. components/markdown-content.tsx - Markdown rendering
  5. components/search.tsx - Search functionality

Medium Priority

  1. components/quizzes-hero.tsx - Hero animations
  2. components/roadmap-hero.tsx - Hero animations
  3. components/header.tsx - Navigation
  4. components/footer.tsx - Footer
  5. components/theme-toggle.tsx - Dark mode toggle

Low Priority

  • All other components in components/
  • Hooks in hooks/ (if any)
  • Utilities in lib/

Testing Framework

  • Already using: Vitest + React Testing Library
  • Good foundation exists

Example Test Structure

import { describe, it, expect } from 'vitest';
import { render, screen } from '@testing-library/react';
import { GameCard } from '@/components/game-card';

describe('GameCard', () => {
  it('renders game title', () => {
    render(<GameCard title="Test Game" slug="test" />);
    expect(screen.getByText('Test Game')).toBeInTheDocument();
  });

  it('renders game description', () => {
    render(<GameCard title="Test" description="Fun game" slug="test" />);
    expect(screen.getByText('Fun game')).toBeInTheDocument();
  });

  it('links to correct URL', () => {
    render(<GameCard title="Test" slug="test-game" />);
    const link = screen.getByRole('link');
    expect(link).toHaveAttribute('href', '/games/test-game');
  });
});

Acceptance Criteria

  • Add unit tests for 5 high-priority components
  • Achieve at least 70% component coverage
  • Test component rendering
  • Test prop variations
  • Test user interactions (click, hover)
  • Test conditional rendering
  • Mock external dependencies
  • Add coverage reporting to package.json
  • Display coverage in CI
  • Document testing guidelines

Coverage Commands

{
  "scripts": {
    "test:coverage": "vitest run --coverage",
    "test:coverage:ui": "vitest --coverage --ui"
  }
}

Files to Create

  • components/__tests__/game-card.test.tsx
  • components/__tests__/quiz-manager.test.tsx
  • components/__tests__/code-block.test.tsx
  • components/__tests__/markdown-content.test.tsx
  • components/__tests__/search.test.tsx
  • docs/testing-guide.md - Testing best practices

Guida contributor