- 1

Pruebas unitarias en Angular con Yes y herramientas IA
01:50 - 2

Unit Testing en Angular para eCommerce con Renderizado del Servidor
04:22 - 3

Configuración de Jest para pruebas unitarias en Angular
14:26 - 4

Cobertura de Código: Configuración y Análisis en Angular
05:46 quiz de Introducción y Configuración de Pruebas
Mocking y pruebas unitarias en Angular: Inyección de dependencias
Clase 19 de 23 • Curso de Pruebas Unitarias en Angular
Contenido del curso
- 5

Uso de Expectator para Testing en Angular
03:36 - 6

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

Generación de Pruebas Unitarias con Inteligencia Artificial
13:41 - 8

Testing de Servicios en Angular con Jest y Spectator
15:11 - 9

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

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

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

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

Pruebas Unitarias con fetch en JavaScript y Mocking de Servicios
09:56 - 14

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

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

Pruebas de Componentes con Data Test ID y Selectores CSS
07:26 - 17

Pruebas de Espionaje en Componentes sin Dependencias
10:29 - 18

Unit Testing para Componentes con Inyección de Dependencias
15:13 quiz de Pruebas de Componentes
- 19

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

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

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

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

Pruebas Unitarias en Angular con Spector y AI
08:04
La inyección de dependencias y el mocking son técnicas fundamentales en el testing de aplicaciones Angular. Estas prácticas permiten crear pruebas unitarias aisladas y eficientes, evitando dependencias innecesarias que podrían complicar nuestros tests. Dominar estas técnicas es esencial para cualquier desarrollador que busque crear aplicaciones robustas y mantenibles.
¿Cómo realizar pruebas unitarias aisladas en Angular?
Cuando desarrollamos aplicaciones en Angular, es común que nuestros componentes dependan de servicios externos. En pruebas de integración, utilizamos los servicios reales, pero esto puede complicarse cuando estos servicios tienen sus propias dependencias o lógica compleja.
Por ejemplo, en una prueba anterior, se utilizó el servicio real CartService porque tenía una lógica simple. Sin embargo, para componentes más complejos como ProductDetail, que depende de ProductService (que a su vez depende de HttpClient), es preferible utilizar técnicas de mocking.
Las pruebas unitarias deben enfocarse únicamente en la responsabilidad del componente que estamos probando. Si ya hemos verificado el funcionamiento de ProductService en sus propias pruebas, no necesitamos volver a probarlo en las pruebas de ProductDetail.
¿Qué es el mocking y cómo implementarlo en Angular?
El mocking es una técnica que consiste en reemplazar dependencias reales por versiones simuladas que podemos controlar. Esto nos permite:
- Aislar el código que estamos probando
- Evitar efectos secundarios no deseados
- Simular diferentes escenarios fácilmente
Para implementar el mocking en Angular, podemos usar la función MockProvider de @angular/core/testing:
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MockProvider } from '@angular/core/testing';
import { ProductDetailComponent } from './product-detail.component';
import { ProductService } from '../../services/product.service';
describe('ProductDetailComponent', () => {
let component: ProductDetailComponent;
let fixture: ComponentFixture<ProductDetailComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [ProductDetailComponent],
providers: [
MockProvider(ProductService)
]
}).compileComponents();
fixture = TestBed.createComponent(ProductDetailComponent);
component = fixture.componentInstance;
});
it('should create', () => {
// Configuración adicional necesaria
expect(component).toBeTruthy();
});
});
MockProvider automáticamente crea un mock del servicio, analizando sus métodos y reemplazándolos con funciones espía (jest.fn()). Esto elimina la necesidad de crear manualmente cada función mock y evita la cadena de dependencias.
¿Cómo manejar inputs requeridos en las pruebas de componentes?
Otro desafío común en las pruebas de componentes es manejar los inputs requeridos. Si un componente necesita ciertos inputs para funcionar correctamente, debemos proporcionarlos en nuestras pruebas:
// Importamos una función para generar productos de prueba
import { generateFakeProduct } from '../../helpers/fake-data';
// En el beforeEach o en el test específico
const fakeProduct = generateFakeProduct();
component.slug = fakeProduct.slug;
fixture.detectChanges();
Para componentes que requieren inputs, debemos:
- Proporcionar valores de prueba realistas
- Asignarlos antes de detectar cambios
- Considerar diferentes escenarios de inputs
En el caso de ProductDetailComponent, necesitamos proporcionar un slug para que el componente pueda funcionar correctamente. Podemos usar una función auxiliar para generar datos de prueba realistas.
¿Cuáles son las ventajas de usar MockProvider en lugar de mocks manuales?
Existen diferentes enfoques para crear mocks en Angular:
- Mocks manuales: Crear objetos que imitan la interfaz del servicio
- useValue con objetos parciales: Proporcionar implementaciones específicas
- MockProvider: Automatizar la creación de mocks
MockProvider ofrece varias ventajas:
- Automatización: No es necesario definir manualmente cada método
- Mantenibilidad: Si el servicio cambia, el mock se adapta automáticamente
- Funciones espía integradas: Facilita verificar si los métodos fueron llamados
// Enfoque manual (más verboso)
{
provide: ProductService,
useValue: {
getProduct: jest.fn(),
// Otros métodos que necesitamos mockear
}
}
// Con MockProvider (más conciso)
MockProvider(ProductService)
El enfoque con MockProvider es más limpio y requiere menos código, lo que facilita el mantenimiento de las pruebas a largo plazo.
La elección entre pruebas de integración y pruebas unitarias con mocks depende del contexto. Para componentes simples con pocas dependencias, las pruebas de integración pueden ser apropiadas. Para componentes más complejos, el mocking nos permite crear pruebas más enfocadas y eficientes.
El testing en Angular es un equilibrio entre verificar que los componentes funcionan correctamente de forma aislada y asegurar que interactúan adecuadamente con sus dependencias. Dominar técnicas como el mocking nos permite crear suites de pruebas robustas que nos dan confianza en nuestro código.
¿Has implementado técnicas de mocking en tus proyectos Angular? Comparte tus experiencias y desafíos en los comentarios.