Vitest reemplaza a Karma y Angular habla con tu IA: el nuevo ecosistema de herramientas
Karma murió. No es una exageración: Angular 21 lo retiró como runner por defecto y lo reemplazó con Vitest. Y junto con eso llegó algo que no esperaba: soporte nativo para que asistentes de IA entiendan la estructura de un proyecto Angular en tiempo real con el protocolo MCP.
Por qué Karma quedó obsoleto
Karma fue el runner de tests de Angular durante más de una década. Abre un browser real, corre los tests ahí y reporta los resultados. Funcional, pero lento, difícil de configurar en CI y sin soporte nativo para el modelo Zoneless. En el mundo actual de testing, donde queremos ejecución rápida y paralela, Karma no competía.
Vitest: el nuevo estándar
- Ejecución en paralelo: múltiples workers, tests más rápidos
- Sin browser real: usa jsdom o happy-dom — más rápido y estable en CI
- Soporte nativo Zoneless: sin el overhead de Zone.js en los tests
- Watch mode inteligente: solo re-ejecuta los tests afectados por cambios
- API compatible con Jest: si venís de Jest, la curva es mínima
# Configurar Vitest en un proyecto Angular 21 existente
ng generate @angular/build:vitest
# O en angular.json
{
"test": {
"builder": "@angular/build:unit-test",
"options": {
"runner": "vitest"
}
}
}
Tests con Vitest + Signals
import { TestBed } from '@angular/core/testing';
import { provideZonelessChangeDetection } from '@angular/core';
import { describe, it, expect } from 'vitest';
import { ContadorComponent } from './contador.component';
describe('ContadorComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [ContadorComponent],
providers: [provideZonelessChangeDetection()]
});
});
it('debería incrementar el contador', () => {
const fixture = TestBed.createComponent(ContadorComponent);
const comp = fixture.componentInstance;
expect(comp.contador()).toBe(0);
comp.incrementar();
// Sin detectChanges() manual — Signals actualizan sincrónicamente
expect(comp.contador()).toBe(1);
expect(comp.doble()).toBe(2);
});
it('debería renderizar el valor actualizado', async () => {
const fixture = TestBed.createComponent(ContadorComponent);
fixture.detectChanges();
const button = fixture.nativeElement.querySelector('button');
button.click();
await fixture.whenStable();
expect(fixture.nativeElement.querySelector('p').textContent).toContain('1');
});
});
ng mcp: Angular habla con tu IA
La feature que más me sorprendió de Angular 21.2: soporte nativo para el Model Context Protocol (MCP). Con un solo comando, Angular expone la estructura del proyecto a asistentes de IA locales para que entiendan el contexto en tiempo real.
# Levantar el servidor MCP de Angular
ng mcp
# Configuración en .cursor/mcp.json o claude_desktop_config.json:
{
"mcpServers": {
"angular": {
"command": "ng",
"args": ["mcp"],
"cwd": "/path/to/mi-proyecto-angular"
}
}
}
Con el servidor MCP activo, el asistente de IA tiene acceso al árbol de componentes, rutas del router, servicios y sus dependencias, grafo de Signals y configuración del proyecto. En la práctica: cuando le pedís al asistente que genere un componente, lo hace correctamente dentro del contexto de tu proyecto — no código genérico que hay que adaptar.
Migrar de Karma a Vitest
# 1. Desinstalar Karma
npm uninstall karma karma-chrome-launcher karma-jasmine karma-jasmine-html-reporter
# 2. Ejecutar el schematic de migración
ng generate @angular/build:vitest
# 3. Verificar tests
ng test
# Los tests de Jasmine son mayormente compatibles
# Solo ajustar: jasmine.SpyObj → vi.Mocked cuando sea necesario
← Artículo anterior: Novedades del template en Angular 21: regex, spread, instanceof y más | Serie Angular 20 → 21.2 | Próximo: Router Signals en Angular 21: navegación standalone sin cargar todo el Router →

Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir!