Cómo configurar Jest en Angular 18

Cuando escribimos pruebas en Angular, Jasmine y Karma vienen configurados por defecto como librería de pruebas y test runner, pero el equipo de Angular ha estado trabajando para traer Jest a Angular.
Hoy vamos a experimentar con el Jest Builder para Jest (Experimental) en Angular 17. ¡Empecemos!
Crear la aplicación de ejemplo
Primero, vamos a crear una aplicación de ejemplo usando Angular 17. En mi caso, tengo Angular 15 instalado de forma global, ya que es la versión que utilizo en mi trabajo diario.
La forma más sencilla de crear un proyecto con Angular 17 sin tener que instalarlo globalmente es ejecutarlo mediante npx.
// crear el proyecto
npx -p @angular/cli ng new lab
// generar componente y servicio
npx ng g c components/toaster
npx ng g s services/toasterPara levantar la aplicación usando npx, ejecuta el siguiente comando: npx ng serve.

Para correr las pruebas en un proyecto de Angular 17 sin instalar nada globalmente, puedes usar el comando npx junto con Jasmine y Karma. Para lograrlo, simplemente ejecuta el siguiente comando: npx ng test.

Nuestro objetivo es usar el Jest Builder, pero antes de dar ese paso, debemos remover Karma y Jasmine de nuestro proyecto.
Eliminar Jasmine y Karma
Primero, vamos a eliminar Jasmine y Karma ejecutando el siguiente comando:
npm remove karma karma-chrome-launcher karma-jasmine karma-jasmine-html-reporterConfigurar el Jest Builder
A continuación, instalamos Jest, sus tipos y el builder en el proyecto:
npm i -D jest @types/jest @angular-builders/jestLuego, actualiza la sección test en el archivo angular.json para utilizar el builder de Jest:
"test": {
"builder": "@angular-builders/jest:run",
"options": {
"tsConfig": "tsconfig.spec.json",
"polyfills": ["zone.js", "zone.js/testing"]
}
}Guarda los cambios y vuelve a ejecutar el comando ng test, ahora usando Jest como el test runner por defecto para Angular (experimental).
Recibimos una advertencia porque todavía es "EXPERIMENTAL". Si revisas los tiempos, verás que la versión experimental tarda más que Jasmine (pero, por supuesto, ¡todavía no está optimizada!).

¡Se ve muy bien! Por supuesto, aún debemos esperar un poco para adoptarlo por completo, pero es un excelente avance para Angular. Actualmente, si quieres usar Jest con Angular, puedes utilizar el schematic: https://github.com/briebug/jest-schematic
ng add @briebug/jest-schematicPuedes seguir el progreso de angular-jest builder o revisar mi proyecto de ejemplo.
¡Que lo disfrutes!
Modern frontend development — Angular, React, TypeScript, accessibility, and performance.
Preguntas Frecuentes
¿Cómo reemplazo Karma y Jasmine por Jest en un proyecto de Angular 18?
Para reemplazar Karma y Jasmine por Jest en Angular 18, primero desinstala los paquetes existentes ejecutando npm remove karma karma-chrome-launcher karma-jasmine karma-jasmine-html-reporter, luego instala Jest y su builder con npm i -D jest @types/jest @angular-builders/jest, y finalmente actualiza la sección test en angular.json para apuntar al builder de Jest.
¿Qué paquetes de npm necesito instalar para usar Jest en Angular?
Necesitas instalar tres paquetes como dependencias de desarrollo: jest para el propio test runner, @types/jest para obtener las definiciones de tipos de TypeScript de las APIs de Jest, y @angular-builders/jest, que proporciona el builder de Angular CLI para integrar Jest en el flujo estándar de ng test.
¿Cómo actualizo angular.json para usar Jest en lugar de Karma?
En angular.json, busca la sección test dentro de la configuración architect de tu proyecto y cambia la propiedad builder del builder por defecto de Karma a @angular-builders/jest:run. También puedes agregar opciones adicionales de Jest en el campo options de esa misma sección.
¿Puedo usar npx para crear un proyecto de Angular sin instalar el CLI de forma global?
Sí, puedes usar npx -p @angular/cli ng new nombre-de-tu-proyecto para crear un nuevo proyecto de Angular usando la versión más reciente del CLI sin instalarla globalmente. Esto resulta muy útil cuando tienes una versión más antigua instalada de forma global para proyectos de trabajo y necesitas generar una aplicación nueva con otra versión.
Artículos Relacionados
Cómo prevenir regresiones de UI con pruebas de snapshot de Jest en Angular
Aprende a detectar regresiones visuales y de estructura del DOM en Angular usando pruebas de snapshot con Jest, cuándo usar snapshots frente a aserciones tradicionales y buenas prácticas para evitar pruebas frágiles.
Cómo y cuándo usar Mocks vs Spies en pruebas unitarias (Vitest, Jest y Jasmine)
Aprende las diferencias prácticas entre Mocks y Spies en pruebas unitarias. Revisa ejemplos prácticos con Vitest moderno (vi.fn, vi.spyOn), Jest y Jasmine en Angular.
Cómo migrar de Jasmine a Jest y Testing Library en Angular
Angular viene por defecto con Jasmine y es un buen framework de pruebas. Pasé año y medio escribiendo y ejecutando pruebas con Jasmine, y funciona bien, pero el mercado se está moviendo hacia Jest y Testing Library. No te preocupes, Jest es más directo y compatible con tus pruebas de Jasmine.
Cómo probar componentes en Angular usando TestBed
Aprende a probar componentes en Angular con TestBed, manejar componentes hijos y mocks de servicios, y migrar de Karma/Jasmine al moderno Vitest con Standalone y Signals.
Compartir este artículo
Si esta guía te resultó útil, compártela con tu equipo o con otros desarrolladores.
Software real. Lecciones reales.
Comparto las lecciones que aprendí por las malas, para que puedas evitarlas o estar preparado cuando ocurran.
Únete a 13,800+ desarrolladores y lectores.
Cero spam. Cancela tu suscripción en cualquier momento.