Contenido del curso
Pruebas de Servicios y Dependencias
- 5

Spectator para unit tests en Angular
03:35 min - 6

Pruebas de Pipes en Angular con Spectator y Jest
10:08 min - 7

Genera unit tests en Angular con AI
13:40 min - 8

Cómo testear servicios Angular con Spectator
15:10 min - 9

Creación de Datos Simulados con la Librería Faker.js
10:39 min - 10

Pruebas Unitarias para Servicios con Inyección de Dependencias en Angular
15:58 min - 11

Pruebas Unitarias con Mocking en MetaTax Service
08:28 min - 12

Pruebas de Servicios HTTP Client en Angular con Spectarer y Jest
15:08 min
Pruebas de Componentes
- 13

jest-fetch-mock para pruebas con fetch
09:55 min - 14

Mocking de APIs Globales en JavaScript para Pruebas Unitarias
09:33 min - 15

Pruebas Unitarias de Componentes en Angular con Spectator
11:51 min - 16

data-testid para queries en componentes Angular
07:26 min - 17

Cómo espiar Outputs con jest.spyOn en Angular
10:28 min - 18

Unit Testing para Componentes con Inyección de Dependencias
15:13 min
Casos Prácticos y Aplicaciones
- 19

Mocking y pruebas unitarias en Angular: Inyección de dependencias
10:20 min - 20

Pruebas Complejas en Angular: Testing de Componentes y Servicios
15:22 min - 21

Pruebas de Mocking y Deferred Components en Angular
10:26 min - 22

Pruebas de Interacción en Componentes Angular: Galería de Imágenes
08:46 min - 23

Múltiples dependencias mockeadas en Angular
Viendo ahora
Múltiples dependencias mockeadas en Angular
Resumen
Cuando un componente Angular tiene varias dependencias inyectadas, las pruebas unitarias se complican rápido. Aquí verás cómo testear un product detail con múltiples servicios usando Spectator, Jest y mock providers, una técnica clave para desarrolladores frontend que buscan cobertura real sin escribir código innecesario.
El reto es claro: tu componente no solo depende de un product service, también consume cart service y meta tag service. Y necesitas probar interacciones como agregar al carrito sin acoplarte a la lógica interna de cada servicio.
Cómo inyectar múltiples dependencias con mock providers en Spectator
La estrategia cambia según lo que quieras controlar de cada servicio. No todos los mocks necesitan el mismo nivel de detalle.
En el caso de product service, sí queríamos definir un valor inicial para que el observable resolviera de inmediato. Pero con cart service y meta tag service, el mock provider por defecto de Spectator basta. [2:30]
¿Qué hace mockProvider en Spectator? Crea automáticamente espías sobre todos los métodos del servicio inyectado. No necesitas definir cada función a mano si solo quieres verificar que fueron llamadas.
Esto significa que puedes dejar la inyección plana, sin pasar parámetros, y Spectator se encarga de generar los spies para que luego puedas hacer aserciones sobre las llamadas.
Cuándo definir un valor inicial vs dejar el mock por defecto
La diferencia es funcional, no estética:
- Si el servicio se ejecuta al inicializar el componente y necesita devolver datos, define el valor inicial.
- Si el servicio se ejecuta tras una interacción del usuario, como un clic, el mock por defecto es suficiente.
- Si solo te interesa verificar que un método fue llamado, no inyectes implementaciones, deja que Spectator espíe.
Cart service entra en la segunda categoría: solo se llama cuando el usuario presiona add to cart, así que no requiere setup adicional.
Cómo probar el clic en add to cart sin probar el carrito completo
La prueba que escribimos verifica que al hacer clic en el botón, el método addToCart del servicio fue invocado con el producto correcto. Nada más.
¿Por qué no probar que el producto realmente entra al carrito? Porque esa es responsabilidad del cart service, no del componente. Cada unidad debe testear lo suyo.
El flujo dentro del it('debería agregar un producto') queda así:
- Localiza el botón con
byTestId('add-to-cart'). - Ejecuta el clic con el helper de Spectator.
- Verifica con
toHaveBeenCalledWithque el servicio recibió el producto mockeado.
Un detalle importante: tras el clic, no necesitas llamar manualmente a la detección de cambios. Spectator sincroniza la vista automáticamente después de eventos, lo que reduce el ruido en tus pruebas.
¿Por qué usar data-test-id en lugar de selectores CSS? Los test IDs desacoplan tus pruebas del estilo y la estructura visual. Si cambias clases o etiquetas HTML, el test sigue funcionando porque busca un identificador semántico.
Cómo reusar la inyección del servicio en varias pruebas
La buena práctica es obtener el servicio una sola vez con inject(CartService) al inicio del bloque de pruebas y reutilizar esa referencia. Evitas repetir código y mantienes consistencia entre los it.
Cuando tipas el resultado de byTestId, puedes especificar HTMLButtonElement para que el linter y Prettier dejen de reclamar. Aunque también puedes pasar el test ID directamente al método de clic y dejar que Spectator falle si no lo encuentra.
Qué herramientas usamos y por qué importa el contexto en la IA
El stack del curso combina Jest, Spectator y Angular, apoyado en inteligencia artificial para acelerar la escritura de pruebas. Aunque Jest aún no tiene soporte oficial al 100 % del equipo de Angular, el setup manual funciona sin problema en cualquier proyecto.
Spectator también es compatible con Jasmine y, a futuro, con Vitest. Pero Jest sigue siendo el framework más popular en el ecosistema, así que la elección tiene sentido para la mayoría de equipos.
- Jest: ejecutor de pruebas con buen rendimiento y mocking nativo.
- Spectator: librería que reduce el boilerplate de TestBed y simplifica la creación de hosts.
- AI: asistente para generar casos base, siempre supervisado.
La lección sobre IA es directa: las language models leen tu código y generan pruebas, pero a veces proponen matchers que no existen en tu setup o flujos innecesarios. Necesitas experiencia para reguiarlas y un buen code base para que el contexto sea útil. [9:15]
Qué cobertura buscar y qué falta por explorar
El reto que queda abierto es alcanzar al menos 80 % de cobertura en tu proyecto, complementando con la documentación de Spectator para directivas, pipes y otros artefactos que no cubrimos en profundidad.
Entre los casos más comunes que ya viste están: componentes con y sin inyección de dependencias, pruebas de integración, uso de test IDs y mocking de HTTP. Con esa base puedes abordar la mayoría de escenarios reales en aplicaciones Angular.
¿En qué parte de tu suite de pruebas crees que la IA te ayudaría más? Cuéntalo en los comentarios.