The coverage testing capability extends the test runner with comprehensive code coverage analysis using c8, providing detailed coverage reports and customizable exclusion patterns.
Executes tests with code coverage instrumentation and reporting.
/**
* Coverage testing command extending TestCommand
* Wraps test execution with c8 coverage instrumentation
*/
class CovCommand extends TestCommand {
/** Prerequire files for coverage instrument, default false */
prerequire: boolean;
/** Coverage ignore patterns, supports multiple arguments */
x: string[];
/** c8 instruments passthrough options with defaults */
c8: string;
/**
* Default coverage exclusion patterns
* Includes common directories and file types to exclude from coverage
*/
get defaultExcludes(): string[];
/**
* Overridden forkNode method that wraps test execution with c8
* Sets up coverage instrumentation and output directories
* @param modulePath - Path to the test runner module
* @param args - Arguments to pass to the test runner
*/
protected forkNode(modulePath: string, args: string[]): Promise<void>;
}Comprehensive set of default exclusion patterns for accurate coverage reporting:
/**
* Default coverage exclusion patterns
* Excludes common non-production code patterns
*/
interface DefaultExclusions {
defaultExcludes: [
'example/',
'examples/',
'mocks**/',
'docs/',
'test/**',
'test{,-*}.js',
'**/*.test.js',
'**/__tests__/**',
'**/node_modules/**',
'typings',
'**/*.d.ts'
];
}Flexible c8 configuration with passthrough options and default instrumentation:
/**
* C8 coverage tool configuration
* Provides comprehensive coverage analysis with multiple output formats
*/
interface C8Configuration {
/** Default c8 options */
defaultC8Options: string; // '--temp-directory node_modules/.c8_output -r text-summary -r json-summary -r json -r lcov -r cobertura'
/** Additional c8 arguments array */
c8Args: string[];
/** C8 binary path */
c8File: string; // 'c8/bin/c8.js'
/** Temporary output directory */
outputDir: string; // 'node_modules/.c8_output'
/** Final coverage directory */
coverageDir: string; // 'coverage'
}Usage Examples:
# Basic coverage
egg-bin cov
# With custom exclusions
egg-bin cov -x "app/plugins/c*" -x "app/autocreate/**"
# With prerequire for slow-loading modules
egg-bin cov --prerequire
# Custom c8 options
egg-bin cov --c8="-r teamcity -r text"
# TypeScript coverage
egg-bin cov --typescriptMultiple output formats for comprehensive coverage analysis:
/**
* Coverage report formats and outputs
* Generates multiple report types for different use cases
*/
interface CoverageReports {
/** Text summary for console output */
textSummary: boolean;
/** JSON summary for programmatic access */
jsonSummary: boolean;
/** Detailed JSON report */
json: boolean;
/** LCOV format for CI/CD integration */
lcov: boolean;
/** Cobertura XML for Jenkins/Azure DevOps */
cobertura: boolean;
/** Additional formats via --c8 option */
customFormats?: string[]; // teamcity, html, text, etc.
}Enhanced TypeScript support with automatic extension detection:
/**
* TypeScript-specific coverage configuration
* Handles TypeScript file extensions and compilation
*/
interface TypeScriptCoverage {
/** TypeScript file extension support */
extensions: string[]; // ['.ts']
/** Spawn wrap shim root for TypeScript modules */
SPAWN_WRAP_SHIM_ROOT: string;
/** Additional exclusions for TypeScript */
tsExclusions: string[]; // ['**/*.d.ts', 'typings']
}Coverage-specific environment variables and prerequire support:
/**
* Coverage environment configuration
* Controls coverage behavior and instrumentation
*/
interface CoverageEnvironment {
/** Prerequire flag for egg-mock integration */
EGG_BIN_PREREQUIRE?: 'true';
/** Additional exclusions from environment */
COV_EXCLUDES?: string; // Comma-separated patterns
/** Spawn wrap configuration for TypeScript */
SPAWN_WRAP_SHIM_ROOT?: string;
}Automatic cleanup and setup of coverage output directories:
/**
* Coverage directory management
* Handles cleanup and preparation of output directories
*/
interface DirectoryManagement {
/** Removes temporary c8 output directory */
cleanupOutputDir(outputDir: string): Promise<void>;
/** Removes final coverage directory */
cleanupCoverageDir(coverageDir: string): Promise<void>;
/** Directory paths */
directories: {
output: string; // 'node_modules/.c8_output'
coverage: string; // 'coverage'
};
}Flexible exclusion pattern system supporting multiple sources:
/**
* Coverage exclusion pattern management
* Combines default, environment, and command-line exclusions
*/
interface ExclusionPatterns {
/** Environment variable exclusions */
envExclusions: string[]; // From COV_EXCLUDES
/** Command-line exclusions */
cliExclusions: string[]; // From -x arguments
/** Combined exclusions set */
allExclusions: Set<string>;
/** Adds exclusion pattern to c8 arguments */
addExclusion(pattern: string): void;
}Environment Variable Usage:
# Set exclusions via environment
COV_EXCLUDES="app/plugins/c*,app/autocreate/**" egg-bin cov
# Multiple exclusion sources combine
COV_EXCLUDES="vendor/**" egg-bin cov -x "temp/**" -x "cache/**"Special prerequire mode for optimizing coverage of slow-loading modules:
/**
* Prerequire mode for coverage optimization
* Useful when mm.app or mm.cluster load files slowly
*/
interface PrerequireIntegration {
/** Prerequire environment flag */
EGG_BIN_PREREQUIRE: 'true';
/** Integration with egg-mock */
eggMockIntegration: boolean;
/** Use case scenarios */
useCases: [
'Slow mm.app startup',
'Complex mm.cluster initialization',
'Heavy dependency loading'
];
}Advanced c8 configuration through passthrough options:
/**
* C8 passthrough option system
* Allows direct control over c8 instrumentation
*/
interface C8PassthroughOptions {
/** Custom reporter options */
reporters: string[]; // '-r teamcity -r text'
/** Output directory override */
outputDirectory: string; // '--output-dir custom-coverage'
/** Thresholds */
thresholds: string; // '--lines 80 --functions 80'
/** Additional c8 flags */
additionalFlags: string[];
}Integration points with CI/CD systems and development workflows:
/**
* Coverage workflow integration
* Supports common CI/CD and development scenarios
*/
interface CoverageIntegration {
/** CI/CD report formats */
ciFormats: ['lcov', 'cobertura', 'json'];
/** Development formats */
devFormats: ['text-summary', 'html'];
/** Coverage badge integration */
badgeSupport: boolean;
/** Threshold enforcement */
thresholdEnforcement: boolean;
}