CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-nx--jest

Nx plugin for Jest testing with executors, generators, and configuration utilities for monorepo testing workflows.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

plugin-system.mddocs/

Plugin System

Nx plugin infrastructure for automatic Jest project detection and configuration inference. The plugin system enables Nx to automatically discover Jest configurations and create appropriate build targets without manual configuration.

Capabilities

Plugin Node Creation

Functions for creating Nx plugin nodes that automatically detect and configure Jest projects.

/**
 * Create nodes for Jest plugin (v1 API)
 * @param configFilePath - Path to Jest configuration file
 * @param options - Plugin configuration options
 * @param context - Nx plugin creation context
 * @returns Plugin node creation result
 */
function createNodes(
  configFilePath: string,
  options: JestPluginOptions | undefined,
  context: CreateNodesContext
): CreateNodesResult;

/**
 * Create nodes for Jest plugin (v2 API with enhanced performance)
 * @param configFilePath - Path to Jest configuration file
 * @param options - Plugin configuration options
 * @param context - Enhanced plugin creation context
 * @returns Promise resolving to plugin node creation result
 */
function createNodesV2(
  configFilePath: string,
  options: JestPluginOptions | undefined,
  context: CreateNodesContextV2
): Promise<CreateNodesResult>;

Jest Plugin Options

Configuration interface for customizing Jest plugin behavior.

interface JestPluginOptions {
  /** Name of the primary test target (default: 'test') */
  targetName?: string;
  /** Name of the CI-optimized test target (default: 'test-ci') */
  ciTargetName?: string;
  /** Name for grouping atomized tasks on CI */
  ciGroupName?: string;
  /** 
   * Disable jest-config and jest-runtime for faster but potentially less accurate configuration loading
   * @default false
   */
  disableJestRuntime?: boolean;
}

Usage Examples:

// nx.json plugin configuration
{
  "plugins": [
    {
      "plugin": "@nx/jest/plugin",
      "options": {
        "targetName": "test",
        "ciTargetName": "test-ci",
        "ciGroupName": "jest-tests"
      }
    }
  ]
}

Plugin Context Interfaces

Context objects provided to plugin node creation functions.

interface CreateNodesContext {
  /** Workspace root directory */
  workspaceRoot: string;
  /** Configuration file being processed */
  configFiles: string[];
  /** Nx.json configuration */
  nxJsonConfiguration: NxJsonConfiguration;
}

interface CreateNodesContextV2 extends CreateNodesContext {
  /** Enhanced context with additional metadata */
  readonly configFiles: readonly string[];
  /** Plugin-specific cache directory */
  cacheDir: string;
}

interface CreateNodesResult {
  /** Map of project names to their configurations */
  projects?: Record<string, ProjectConfiguration>;
  /** External node dependencies */
  externalNodes?: Record<string, ProjectConfiguration>;
}

Plugin Registration

The Jest plugin is automatically registered when added to nx.json:

{
  "plugins": [
    "@nx/jest/plugin"
  ]
}

Or with custom options:

{
  "plugins": [
    {
      "plugin": "@nx/jest/plugin",
      "options": {
        "targetName": "test",
        "ciTargetName": "ci-test",
        "disableJestRuntime": false
      }
    }
  ]
}

Project Detection

The plugin automatically detects Jest projects by searching for configuration files:

  • jest.config.js
  • jest.config.ts
  • jest.config.mjs
  • jest.config.cjs
  • jest.config.json

Configuration File Processing:

// The plugin processes Jest configuration files like:
export default {
  displayName: 'my-lib',
  preset: '../../jest.preset.js',
  testEnvironment: 'node',
  coverageDirectory: '../../coverage/libs/my-lib',
  transform: {
    '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
  },
};

Target Generation

The plugin automatically generates test targets for detected Jest projects:

{
  "name": "my-lib",
  "targets": {
    "test": {
      "executor": "@nx/jest:jest",
      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
      "options": {
        "jestConfig": "libs/my-lib/jest.config.ts",
        "passWithNoTests": true
      }
    },
    "test-ci": {
      "executor": "@nx/jest:jest",
      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
      "options": {
        "jestConfig": "libs/my-lib/jest.config.ts",
        "ci": true,
        "codeCoverage": true
      }
    }
  }
}

Configuration Inference

The plugin infers configuration from Jest config files:

  • Test Environment: Detects testEnvironment setting
  • Coverage Settings: Infers coverage options and output directories
  • File Patterns: Reads testMatch and testPathIgnorePatterns
  • Module Resolution: Processes moduleNameMapper and resolver settings
  • Transformation Rules: Analyzes transform configuration

Example Inference:

// From jest.config.ts:
export default {
  testEnvironment: 'jsdom',
  coverageDirectory: '../../coverage/apps/my-app',
  testMatch: ['<rootDir>/src/**/*.spec.ts'],
};

// Plugin generates:
{
  "test": {
    "executor": "@nx/jest:jest",
    "options": {
      "jestConfig": "apps/my-app/jest.config.ts"
    },
    "outputs": ["{workspaceRoot}/coverage/apps/my-app"]
  }
}

Performance Optimization

The plugin includes several performance optimizations:

  • Caching: Configuration parsing results are cached
  • Lazy Loading: Jest runtime is loaded only when needed
  • Batch Processing: Multiple configuration files processed together
  • Hash-based Invalidation: Cache invalidation based on file content hashes

Runtime Optimization:

// When disableJestRuntime is true, the plugin uses faster but simpler config parsing
{
  "plugin": "@nx/jest/plugin",
  "options": {
    "disableJestRuntime": true // Faster but potentially less accurate
  }
}

Multi-Project Configuration

The plugin handles monorepo setups with multiple Jest projects:

// Root jest.config.ts for multi-project setup
export default {
  projects: [
    '<rootDir>/apps/*/jest.config.ts',
    '<rootDir>/libs/*/jest.config.ts'
  ]
};

The plugin creates individual targets for each discovered project while maintaining the multi-project relationship.

Error Handling

The plugin includes comprehensive error handling:

  • Invalid Configuration: Logs warnings for unparseable Jest configs
  • Missing Files: Handles missing Jest configuration files gracefully
  • Circular Dependencies: Detects and prevents circular project references
  • Version Compatibility: Warns about Jest version compatibility issues

Integration with Nx Features

The plugin integrates with core Nx features:

  • Affected: Automatically includes test targets in affected calculations
  • Caching: Enables intelligent caching of test results
  • Parallelization: Supports parallel test execution across projects
  • Watch Mode: Integrates with Nx watch mode for file change detection

Install with Tessl CLI

npx tessl i tessl/npm-nx--jest

docs

config-management.md

index.md

multi-project.md

plugin-system.md

preset-config.md

project-configuration.md

test-execution.md

tile.json