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
Viendo ahora - 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
08:03 min
jest-fetch-mock para pruebas con fetch
Resumen
Probar funciones que usan fetch nativo de JavaScript en Angular requiere una estrategia distinta a la del HttpClient. Aquí aprenderás a generar pruebas unitarias para un servicio de categorías que usa fetch con async/await, cómo apoyarte en la IA para reutilizar patrones existentes y por qué conviene una librería especializada para hacer mocking del fetch.
Por qué fetch necesita un mocking diferente al HttpClient
Cuando trabajas con HttpClient, Spectator te resuelve la inyección de dependencias mediante createHttpFactory, y eso facilita interceptar las peticiones. Con fetch la historia cambia: no se importa de ninguna librería ni se inyecta, porque pertenece a las APIs globales del navegador y de Node.js.
¿Qué es un global en testing? Es una función o variable disponible en el entorno de ejecución sin necesidad de importarla, como fetch, window o console. Para mockearla en Jest la reasignas sobre el objeto
global.
Esa diferencia obliga a suplantar fetch directamente sobre el objeto global, ya que no quieres que la prueba dispare una petición real a un servidor.
Qué tiene de especial el servicio de categorías
Dentro de domains/shared el servicio de category expone dos alternativas para listar datos:
- Un
getAllclásico que devuelve un Observable usando HttpClient. - Un
getAllen versión Promise, implementado con fetch nativo y async/await.
La primera versión se prueba igual que cualquier servicio HTTP. La segunda es la interesante, porque exige una técnica específica de mocking.
Cómo reutilizar mocks de categorías entre productos y servicios
Antes de escribir las pruebas conviene dejar listo el archivo category.mock.ts. La idea es centralizar la generación de datos falsos para no duplicar lógica.
Un detalle clave: dentro del mock de producto ya existía un fake pequeño de categoría. En lugar de mantener dos versiones, se reutiliza la función generateSubCategory directamente desde el mock de categorías.
- Importas
generateSubCategoryen el mock del producto. - Aceptas un parámetro opcional
datapara sobreescribir la categoría cuando lo necesites. - Si no se envía nada, se generan los datos predeterminados.
Así evitas datos inconsistentes entre suites de pruebas y mantienes una sola fuente de verdad para las categorías falsas.
Cómo guiar a Cursor para generar pruebas basadas en otro spec
Los servicios suelen seguir patrones repetidos: un CRUD con create, read, update y delete. Aprovechando esa similitud, puedes pedirle a la IA que use un archivo de pruebas existente como plantilla.
El prompt usado fue claro: generar unit tests para category.service, validar fallas, agregar casos, y usar product.service.spec como guía en lugar de pedirle que se base en todo el codebase. Como contexto adicional se adjuntó el archivo category.mocks para que supiera generar categorías falsas con la función ya creada.
¿Por qué pasarle un spec como guía a la IA? Porque le das un patrón validado por ti. La IA replica la estructura, los nombres, el estilo de aserciones y reduce errores como inventar métodos que no existen.
El resultado fue notable: Cursor detectó que no existía category.service.spec, lo creó y replicó la forma de probar HTTP. Esta vez no se equivocó con el flush null ni con los estatus de error, porque tenía un ejemplo correcto del cual aprender.
Dónde tropezó la IA al probar la versión con Promise
Para el getAll basado en fetch, Cursor improvisó. Agregó un global.fetch mockeado manualmente y resolvió las promesas con esa estructura.
Funciona, pero tiene problemas:
- El typing queda raro y poco claro.
- Aparecieron usos extraños como
rejectsen contextos donde no aplica. - No es código reutilizable entre múltiples archivos de prueba.
La prueba pasa al ejecutarla, pero el código no se entiende a primera vista y eso afecta el mantenimiento.
Qué librería simplifica el mocking de fetch en Jest
La recomendación es usar jest-fetch-mock, una librería disponible en NPM que estandariza la suplantación de fetch en Jest.
¿Qué hace jest-fetch-mock? Reemplaza el fetch global con una versión mockeable que te permite definir respuestas, errores y secuencias con una API limpia y reusable, sin tocar
global.fetchmanualmente.
Las ventajas frente a la solución improvisada por la IA:
- Sintaxis declarativa para devolver respuestas o forzar errores.
- Tipado correcto que evita warnings y código confuso.
- Reutilizable en cualquier servicio que use fetch.
- Lecturable para quien revise el spec por primera vez.
Una vez integrada, puedes pasarle esa implementación a la IA como nueva guía. Así, cada vez que aparezca otro servicio con fetch, Cursor usará jest-fetch-mock en lugar de volver a inventar el mocking global.
¿Has usado fetch en lugar de HttpClient en tus servicios de Angular? Cuéntame en los comentarios cómo manejas tus pruebas y si ya conocías esta librería.