- 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
Pruebas de Interacción en Componentes Angular: Galería de Imágenes
Clase 22 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 realización de pruebas en componentes de Angular que contienen elementos repetitivos presenta desafíos únicos que requieren estrategias específicas. Cuando trabajamos con galerías de imágenes o listas dinámicas, necesitamos métodos que nos permitan interactuar con elementos individuales dentro de colecciones. Dominar estas técnicas es fundamental para garantizar la calidad y robustez de nuestras aplicaciones Angular.
¿Cómo probar elementos repetitivos en Angular?
Cuando desarrollamos componentes que muestran colecciones de elementos, como galerías de imágenes, nos enfrentamos al reto de probar interacciones específicas con elementos individuales dentro de esas colecciones. En estos casos, no podemos simplemente agregar un data-testid único a cada elemento, ya que estos se generan dinámicamente.
El problema principal radica en que una buena práctica dicta que los atributos data-testid deben ser únicos, similar a los IDs en HTML. Cuando trabajamos con elementos generados mediante ciclos iterativos (como *ngFor), necesitamos una estrategia diferente.
Uso de selectores para elementos repetitivos
Para resolver este problema, podemos utilizar selectores que nos permitan acceder a colecciones de elementos. La estrategia consiste en:
- Asignar un
data-testidal contenedor que alberga los elementos repetitivos - Utilizar métodos de consulta para acceder a los elementos hijos específicos
- Interactuar con los elementos individuales según sea necesario
Veamos un ejemplo práctico:
// Asignamos el data-testid al contenedor
<div data-testid="gallery">
<img *ngFor="let image of product.images" [src]="image" (click)="changeImage(image)">
</div>
En nuestras pruebas, podemos acceder a todas las imágenes dentro de la galería:
it('Debería cambiar el cover cuando una imagen es clickeada', () => {
// Renderizamos el componente
fixture.detectChanges();
// Obtenemos el contenedor de la galería
const gallery = screen.getByTestId('gallery');
// Obtenemos todas las imágenes dentro de la galería
const images = gallery.querySelectorAll('img');
// Verificamos que existan imágenes antes de hacer clic
if (images && images.length > 0) {
// Hacemos clic en la segunda imagen (índice 1)
fireEvent.click(images[1]);
// Verificamos que el cover haya cambiado
// Aquí iría la lógica para verificar el cambio
}
});
Generación de datos de prueba personalizados
Para tener un control más preciso sobre nuestras pruebas, es recomendable generar datos de prueba específicos. En el ejemplo, utilizamos Faker para generar imágenes de prueba:
// Importamos faker
import { faker } from '@faker-js/faker';
// Generamos un producto con 4 imágenes
const mockProduct = {
// Otras propiedades del producto
images: [
faker.image.url(),
faker.image.url(),
faker.image.url(),
faker.image.url()
]
};
Esto nos permite tener un conjunto conocido de datos para nuestras pruebas, lo que facilita la verificación de comportamientos específicos.
¿Cómo verificar interacciones con elementos repetitivos?
Una vez que tenemos acceso a los elementos individuales, podemos probar interacciones específicas como clics y verificar que el comportamiento sea el esperado.
Prueba de interacción con imágenes en una galería
En nuestro ejemplo, queremos verificar que al hacer clic en una imagen de la galería, el cover principal cambie:
it('Debería cambiar el cover cuando una imagen es clickeada', () => {
// Configuración inicial
fixture.detectChanges();
// Obtenemos la galería y sus imágenes
const gallery = screen.getByTestId('gallery');
const images = gallery.querySelectorAll('img');
// Guardamos la referencia al cover inicial
const initialCover = screen.getByTestId('main-cover').src;
// Hacemos clic en la segunda imagen
if (images && images.length > 1) {
fireEvent.click(images[1]);
// Verificamos que el cover haya cambiado
const newCover = screen.getByTestId('main-cover').src;
expect(newCover).not.toEqual(initialCover);
expect(newCover).toEqual(mockProduct.images[1]);
}
});
Es importante notar que en programación los índices comienzan en 0, por lo que images[1] se refiere a la segunda imagen de la colección.
Manejo de listas potencialmente vacías
Cuando trabajamos con colecciones que podrían estar vacías, es importante incluir verificaciones para evitar errores:
// Verificamos que existan imágenes antes de interactuar
if (images && images.length > 0) {
// Realizamos la interacción
fireEvent.click(images[0]);
}
Este enfoque defensivo nos protege contra errores en tiempo de ejecución durante las pruebas.
¿Qué ventajas ofrece este enfoque de testing?
El uso de selectores para acceder a elementos repetitivos en nuestras pruebas ofrece varias ventajas:
- Flexibilidad: Podemos trabajar con colecciones dinámicas de elementos
- Precisión: Podemos seleccionar elementos específicos dentro de una colección
- Mantenibilidad: Evitamos la proliferación de atributos
data-testidúnicos - Realismo: Las pruebas se asemejan más a cómo los usuarios interactúan con la aplicación
Este enfoque nos permite probar de manera efectiva componentes complejos como galerías de imágenes, listas de productos, tablas de datos y otros elementos que muestran colecciones de información.
La capacidad de seleccionar y probar elementos individuales dentro de colecciones es una habilidad esencial para crear pruebas completas y robustas en aplicaciones Angular. Dominar estas técnicas te permitirá garantizar que tus componentes funcionen correctamente en todos los escenarios.
¿Has tenido dificultades al probar componentes con elementos repetitivos? Comparte tus experiencias y soluciones en los comentarios para ayudar a otros desarrolladores a superar estos desafíos.