Smithery Logo
MCPsSkillsDocsPricing
Login
Smithery Logo

Accelerating the Agent Economy

Resources

DocumentationPrivacy PolicySystem Status

Company

PricingAboutBlog

Connect

© 2026 Smithery. All rights reserved.

    ehtbanton

    jest-config-generator

    ehtbanton/jest-config-generator
    Coding

    About

    SKILL.md

    Install

    Install via Skills CLI

    or add to your agent
    • Claude Code
      Claude Code
    • Codex
      Codex
    • OpenClaw
      OpenClaw
    • Cursor
      Cursor
    • Amp
      Amp
    • GitHub Copilot
      GitHub Copilot
    • Gemini CLI
      Gemini CLI
    • Kilo Code
      Kilo Code
    • Junie
      Junie
    • Replit
      Replit
    • Windsurf
      Windsurf
    • Cline
      Cline
    • Continue
      Continue
    • OpenCode
      OpenCode
    • OpenHands
      OpenHands
    • Roo Code
      Roo Code
    • Augment
      Augment
    • Goose
      Goose
    • Trae
      Trae
    • Zencoder
      Zencoder
    • Antigravity
      Antigravity
    ├─
    ├─
    └─

    About

    Generate Jest configuration files for JavaScript/TypeScript testing with coverage, mocking, and environment-specific settings.

    SKILL.md

    Jest Config Generator

    Generate optimized Jest configuration files for JavaScript and TypeScript testing projects.

    Output Requirements

    File Output: jest.config.js, jest.config.ts, or jest.config.json Format: JavaScript module (ESM or CJS) or JSON Compatibility: Jest 29.x

    When Invoked

    Immediately generate a complete Jest configuration appropriate for the project type. Include sensible defaults for coverage, transforms, and module resolution.

    Configuration Templates

    TypeScript Project (Node.js)

    // jest.config.js
    /** @type {import('jest').Config} */
    const config = {
      // Test environment
      testEnvironment: 'node',
    
      // File extensions
      moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
    
      // Transform TypeScript files
      transform: {
        '^.+\\.tsx?$': [
          'ts-jest',
          {
            tsconfig: 'tsconfig.json',
            isolatedModules: true,
          },
        ],
      },
    
      // Test file patterns
      testMatch: [
        '**/__tests__/**/*.+(ts|tsx|js)',
        '**/?(*.)+(spec|test).+(ts|tsx|js)',
      ],
    
      // Ignore patterns
      testPathIgnorePatterns: [
        '/node_modules/',
        '/dist/',
        '/build/',
      ],
    
      // Module path aliases (match tsconfig paths)
      moduleNameMapper: {
        '^@/(.*)$': '<rootDir>/src/$1',
        '^@utils/(.*)$': '<rootDir>/src/utils/$1',
        '^@models/(.*)$': '<rootDir>/src/models/$1',
      },
    
      // Setup files
      setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
    
      // Coverage configuration
      collectCoverageFrom: [
        'src/**/*.{ts,tsx}',
        '!src/**/*.d.ts',
        '!src/**/index.ts',
        '!src/**/*.stories.{ts,tsx}',
        '!src/types/**/*',
      ],
      coverageDirectory: 'coverage',
      coverageReporters: ['text', 'lcov', 'html'],
      coverageThreshold: {
        global: {
          branches: 80,
          functions: 80,
          lines: 80,
          statements: 80,
        },
      },
    
      // Performance
      maxWorkers: '50%',
      cache: true,
      cacheDirectory: '<rootDir>/.jest-cache',
    
      // Timeouts
      testTimeout: 10000,
    
      // Clear mocks between tests
      clearMocks: true,
      restoreMocks: true,
    
      // Verbose output
      verbose: true,
    };
    
    module.exports = config;
    

    React Application (Vite/CRA)

    // jest.config.js
    /** @type {import('jest').Config} */
    const config = {
      // Use jsdom for DOM testing
      testEnvironment: 'jsdom',
    
      // Setup files
      setupFilesAfterEnv: ['<rootDir>/src/setupTests.ts'],
    
      // Transform
      transform: {
        '^.+\\.(ts|tsx)$': [
          'ts-jest',
          {
            tsconfig: 'tsconfig.json',
            isolatedModules: true,
          },
        ],
        '^.+\\.(js|jsx)$': 'babel-jest',
      },
    
      // Module resolution
      moduleNameMapper: {
        // Handle CSS imports
        '\\.(css|less|scss|sass)$': 'identity-obj-proxy',
    
        // Handle image imports
        '\\.(jpg|jpeg|png|gif|svg|webp)$': '<rootDir>/__mocks__/fileMock.js',
    
        // Path aliases
        '^@/(.*)$': '<rootDir>/src/$1',
        '^@components/(.*)$': '<rootDir>/src/components/$1',
        '^@hooks/(.*)$': '<rootDir>/src/hooks/$1',
        '^@utils/(.*)$': '<rootDir>/src/utils/$1',
      },
    
      // Test patterns
      testMatch: [
        '<rootDir>/src/**/__tests__/**/*.{ts,tsx}',
        '<rootDir>/src/**/*.{spec,test}.{ts,tsx}',
      ],
    
      // Ignore
      testPathIgnorePatterns: [
        '/node_modules/',
        '/dist/',
        '/.next/',
      ],
    
      // Transform ignore
      transformIgnorePatterns: [
        '/node_modules/(?!(uuid|other-esm-package)/)',
      ],
    
      // Coverage
      collectCoverageFrom: [
        'src/**/*.{ts,tsx}',
        '!src/**/*.d.ts',
        '!src/**/*.stories.{ts,tsx}',
        '!src/main.tsx',
        '!src/vite-env.d.ts',
      ],
      coverageDirectory: 'coverage',
      coverageReporters: ['text', 'lcov', 'html'],
    
      // Mock behavior
      clearMocks: true,
      restoreMocks: true,
    
      // Globals
      globals: {
        'ts-jest': {
          isolatedModules: true,
        },
      },
    };
    
    module.exports = config;
    

    Next.js Application

    // jest.config.js
    const nextJest = require('next/jest');
    
    const createJestConfig = nextJest({
      // Path to Next.js app
      dir: './',
    });
    
    /** @type {import('jest').Config} */
    const customConfig = {
      // Test environment
      testEnvironment: 'jest-environment-jsdom',
    
      // Setup files
      setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
    
      // Module aliases (synced with tsconfig.json)
      moduleNameMapper: {
        '^@/(.*)$': '<rootDir>/src/$1',
        '^@components/(.*)$': '<rootDir>/src/components/$1',
        '^@lib/(.*)$': '<rootDir>/src/lib/$1',
        '^@hooks/(.*)$': '<rootDir>/src/hooks/$1',
      },
    
      // Test patterns
      testMatch: [
        '**/__tests__/**/*.[jt]s?(x)',
        '**/?(*.)+(spec|test).[jt]s?(x)',
      ],
    
      // Ignore
      testPathIgnorePatterns: [
        '<rootDir>/node_modules/',
        '<rootDir>/.next/',
        '<rootDir>/e2e/',
      ],
    
      // Coverage
      collectCoverageFrom: [
        'src/**/*.{js,jsx,ts,tsx}',
        '!src/**/*.d.ts',
        '!src/**/*.stories.{js,jsx,ts,tsx}',
        '!src/app/layout.tsx',
        '!src/app/providers.tsx',
      ],
    
      // Module directories
      moduleDirectories: ['node_modules', '<rootDir>/'],
    };
    
    module.exports = createJestConfig(customConfig);
    

    API/Backend (Express/Fastify)

    // jest.config.js
    /** @type {import('jest').Config} */
    const config = {
      preset: 'ts-jest',
      testEnvironment: 'node',
    
      // Root directory
      roots: ['<rootDir>/src', '<rootDir>/tests'],
    
      // Transform
      transform: {
        '^.+\\.ts$': ['ts-jest', { tsconfig: 'tsconfig.json' }],
      },
    
      // Test patterns
      testMatch: [
        '**/tests/**/*.test.ts',
        '**/tests/**/*.spec.ts',
        '**/__tests__/**/*.ts',
      ],
    
      // Path mapping
      moduleNameMapper: {
        '^@/(.*)$': '<rootDir>/src/$1',
        '^@controllers/(.*)$': '<rootDir>/src/controllers/$1',
        '^@models/(.*)$': '<rootDir>/src/models/$1',
        '^@services/(.*)$': '<rootDir>/src/services/$1',
        '^@middleware/(.*)$': '<rootDir>/src/middleware/$1',
        '^@utils/(.*)$': '<rootDir>/src/utils/$1',
      },
    
      // Setup
      setupFilesAfterEnv: ['<rootDir>/tests/setup.ts'],
      globalSetup: '<rootDir>/tests/globalSetup.ts',
      globalTeardown: '<rootDir>/tests/globalTeardown.ts',
    
      // Coverage
      collectCoverageFrom: [
        'src/**/*.ts',
        '!src/**/*.d.ts',
        '!src/index.ts',
        '!src/types/**/*',
        '!src/migrations/**/*',
      ],
      coverageThreshold: {
        global: {
          branches: 70,
          functions: 80,
          lines: 80,
          statements: 80,
        },
      },
    
      // Test isolation
      clearMocks: true,
      restoreMocks: true,
      resetModules: true,
    
      // Timeouts (longer for integration tests)
      testTimeout: 30000,
    
      // Force exit after tests complete
      forceExit: true,
      detectOpenHandles: true,
    
      // Verbose
      verbose: true,
    };
    
    module.exports = config;
    

    Monorepo (with projects)

    // jest.config.js (root)
    /** @type {import('jest').Config} */
    const config = {
      // Use projects for monorepo
      projects: [
        '<rootDir>/packages/*/jest.config.js',
        '<rootDir>/apps/*/jest.config.js',
      ],
    
      // Root coverage
      collectCoverage: true,
      coverageDirectory: '<rootDir>/coverage',
      coverageReporters: ['text', 'lcov', 'json-summary'],
    
      // Merge coverage from all projects
      collectCoverageFrom: [
        'packages/*/src/**/*.{ts,tsx}',
        'apps/*/src/**/*.{ts,tsx}',
        '!**/*.d.ts',
        '!**/node_modules/**',
      ],
    };
    
    module.exports = config;
    

    Package Project Example

    // packages/shared/jest.config.js
    /** @type {import('jest').Config} */
    const config = {
      displayName: 'shared',
      preset: 'ts-jest',
      testEnvironment: 'node',
    
      rootDir: '.',
    
      testMatch: ['<rootDir>/src/**/*.test.ts'],
    
      moduleNameMapper: {
        '^@shared/(.*)$': '<rootDir>/src/$1',
      },
    
      // Use root tsconfig
      transform: {
        '^.+\\.tsx?$': [
          'ts-jest',
          { tsconfig: '<rootDir>/tsconfig.json' },
        ],
      },
    };
    
    module.exports = config;
    

    Setup Files

    jest.setup.ts (React)

    // jest.setup.ts
    import '@testing-library/jest-dom';
    
    // Mock IntersectionObserver
    global.IntersectionObserver = class IntersectionObserver {
      constructor() {}
      observe() { return null; }
      unobserve() { return null; }
      disconnect() { return null; }
    } as any;
    
    // Mock ResizeObserver
    global.ResizeObserver = class ResizeObserver {
      constructor() {}
      observe() { return null; }
      unobserve() { return null; }
      disconnect() { return null; }
    } as any;
    
    // Mock matchMedia
    Object.defineProperty(window, 'matchMedia', {
      writable: true,
      value: jest.fn().mockImplementation(query => ({
        matches: false,
        media: query,
        onchange: null,
        addListener: jest.fn(),
        removeListener: jest.fn(),
        addEventListener: jest.fn(),
        removeEventListener: jest.fn(),
        dispatchEvent: jest.fn(),
      })),
    });
    

    jest.setup.ts (API)

    // tests/setup.ts
    import { prisma } from '@/lib/prisma';
    
    // Clean up after each test
    afterEach(async () => {
      jest.clearAllMocks();
    });
    
    // Close database connection after all tests
    afterAll(async () => {
      await prisma.$disconnect();
    });
    

    Mock Files

    fileMock.js

    // __mocks__/fileMock.js
    module.exports = 'test-file-stub';
    

    styleMock.js

    // __mocks__/styleMock.js
    module.exports = {};
    

    Validation Checklist

    Before outputting, verify:

    • Correct testEnvironment (node vs jsdom)
    • Transform matches file types used
    • Path aliases match tsconfig
    • Coverage excludes appropriate files
    • Setup files exist or noted as needed
    • ESM packages in transformIgnorePatterns
    • Appropriate timeouts set

    Example Invocations

    Prompt: "Create Jest config for a TypeScript Node.js API" Output: Complete jest.config.js with ts-jest, coverage, path aliases.

    Prompt: "Generate Jest configuration for React Testing Library" Output: Complete jest.config.js with jsdom, RTL setup, CSS mocks.

    Prompt: "Jest config for Next.js 14 with App Router" Output: Complete jest.config.js using next/jest with proper setup.

    Repository
    ehtbanton/claudeskillsrepo
    Files