{"record":{"id":"83f1790ad604e44f","repo":"angular/angular-cli","slug":"the-following-karma-configuration-files-require-m","errorCode":null,"errorMessage":"\nThe following Karma configuration files require manual migration:","messagePattern":"\nThe following Karma configuration files require manual migration:","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/schematics/angular/migrations/migrate-karma-to-vitest/migration.ts","lineNumber":198,"sourceCode":"  context.logger.info('\\n--- Karma to Vitest Migration Summary ---');\n  context.logger.info(`Projects migrated: ${migratedProjects.length}`);\n  if (migratedProjects.length > 0) {\n    context.logger.info(`  - ${migratedProjects.join(', ')}`);\n  }\n  context.logger.info(`Projects skipped (non-applications): ${skippedNonApplications.length}`);\n  if (skippedNonApplications.length > 0) {\n    context.logger.info(`  - ${skippedNonApplications.join(', ')}`);\n  }\n  context.logger.info(\n    `Projects skipped (missing application builder): ${skippedMissingAppBuilder.length}`,\n  );\n  if (skippedMissingAppBuilder.length > 0) {\n    context.logger.info(`  - ${skippedMissingAppBuilder.join(', ')}`);\n  }\n\n  const uniqueManualFiles = [...new Set(manualMigrationFiles)];\n  if (uniqueManualFiles.length > 0) {\n    context.logger.warn(`\\nThe following Karma configuration files require manual migration:`);\n    for (const file of uniqueManualFiles) {\n      context.logger.warn(`  - ${file}`);\n    }\n  }\n  if (migratedProjects.length > 0) {\n    context.logger.info(\n      `\\nNote: To refactor your test files from Jasmine to Vitest, consider running the following command:` +\n        `\\n  ng g @schematics/angular:refactor-jasmine-vitest <project_name>`,\n    );\n  }\n  context.logger.info('-----------------------------------------\\n');\n}\n\nfunction updateProjects(tree: Tree, context: SchematicContext): Rule {\n  return updateWorkspace(async (workspace) => {\n    let needsCoverage = false;\n    let needsIstanbul = false;\n    const removableKarmaConfigs = new Map<string, KarmaConfigProcessingResult>();","sourceCodeStart":180,"sourceCodeEnd":216,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/schematics/angular/migrations/migrate-karma-to-vitest/migration.ts#L180-L216","documentation":"At the end of the Karma-to-Vitest migration, logSummary prints a summary of work left for you. This line announces that one or more Karma configuration files could not be automatically migrated and are listed on the following lines.","triggerScenarios":"Running the migrate-karma-to-vitest migration when at least one processed project had a non-removable custom karma config, causing its karmaConfig path to be pushed to manualMigrationFiles.","commonSituations":"Workspace-wide migration where some projects use custom karma.conf.js files (custom webpack/test setups) — the migration completes for tests but flags these configs for manual follow-up.","solutions":["Inspect each listed Karma config file in the subsequent warning lines","Manually port the custom settings into Vitest configs and set runnerConfig: true","Delete the Karma configs after porting and re-run tests"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// before migrating a workspace, inventory custom karma configs\nconst files = Object.values(angularJson.projects)\n  .map(p => p.architect?.test?.options?.karmaConfig)\n  .filter(Boolean);\nif (files.length) console.log('Karma configs needing manual migration:', files);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Audit workspaces for custom karma configs before bulk migrations","Standardize test configuration across projects to minimize manual migrations","Schedule time to port listed configs immediately after migration"],"tags":["angular","schematics","vitest","karma-migration","summary"],"backgroundTag":"karma-config-manual-migration","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}