The-DevOps-Daily/devops-daily

feat: Increase component test coverage

開放

#544 建立於 2025年12月2日

 (0 則留言) (0 個反應) (0 位負責人)TypeScript (392 個分叉)github user discovery
enhancementgood first issuehacktoberfest

倉庫指標

星標
 (1,087 顆星)
PR 合併指標
 (平均合併 1天 23小時) (30 天內合併 82 個 PR)

描述

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

貢獻者指南