Tengo que compilar varias veces para que me tome las ultimas pruebas agregadas. Esto es normal? A quien más le pesa?
Bienvenida e Introducción
¿Qué son las pruebas unitarias?
¿Por qué hacer pruebas unitarias?
Creando un framework de pruebas básico
Mi primera prueba unitaria en JavaScript
Las funciones expect() y it()
Organizando el código para correr en la web
Organizando el código para correr utilizando nodejs
Análisis estático de código
Herramientas de análisis estático de código
ESLint: Agregando alertas a nuestro código con ECMA Script
Herramientas de corrección de estilo
Herramientas de tipado
Trabajando con Jasmine en el frontend
Profundización en SpyOn: Comandos más utilizados y cómo ponerlos a prueba
Configurar un ambiente de trabajo para trabajar con el framework jasmine
Configurar Jasmine utilizando Node.js
Primer set de pruebas con Jasmine
Diccionario Jasmine
Probando Nodejs apps con Jasmine
Introducción al módulo de testing del lado del servidor
Configurando el proyecto Jasmine utilizando npm
Agregando Plugins a Jasmine
Configurando nuestro reporter
Pruebas en el servidor: Verificando un status 200 en GET
Pruebas en el servidor: Probando el método GET y Reto con FindByID
Pruebas en el servidor: Probando el método POST (request to server)
Pruebas en el servidor: Probando el método POST (request to PDF)
Probando Angular apps con Jasmine
Tipos de pruebas
Pruebas en el frontend: Probando el componente principal (App)
Configurando los ciclos de vida
Creando las pruebas del formulario: Configuración
Creando las pruebas necesarias para un formulario. (Primeras pruebas)
Probando el caso de exito al guardar un elemento en el servidor.
Trabajando con event emitters
Testeando ngZone y navegación.
Configurando el TestBed de el componente PINs
Creando un espia sobre el objecto window
Pruebas de integración de Angular apps con Jasmine
Ejecutando funciones a través de eventos en el template
Probando la navegación
Probando servicios con HTTP
Completando las pruebas del servicio HTTP
Cierre del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Cuando trabajamos con Jasmine, una popular biblioteca de pruebas en JavaScript, es posible crear espías no solo sobre nuestras propias clases o las que utilizamos a través de bibliotecas, sino también sobre los objetos de configuración que JavaScript nos ofrece. Un ejemplo clave es el objeto global window
, el cual permite, entre otras cosas, abrir una nueva URL en una pestaña diferente. Exploraremos cómo implementar esto mediante espías en Jasmine para mejorar nuestras pruebas unitarias.
window
?Espiar métodos del objeto window
es una práctica que nos permite verificar que dichos métodos sean llamados con los parámetros correctos. Imagina que tienes un componente que abre URLs al llamarse. Podrías querer asegurarte de que el método open
de window
se invoca apropiadamente. Esto asegura que los comportamientos esperados ocurren cuando interactúas con tu aplicación.
describe('Espionando métodos del objeto window', () => {
it('debería llamar al método open de window con la URL correcta', () => {
spyOn(window, 'open');
const url = 'https://example.com';
// La lógica que llama a window.open va aquí
expect(window.open).toHaveBeenCalledWith(url);
});
});
Crear stubs, o servicios simulados, es crucial para evitar dependencias externas al probar nuestras clases. En Angular, por ejemplo, podrías tener componentes que dependen de diversos servicios, como un snackbar
, el pinservice
, o la librería de formularios reactivos. Para probarlos, necesitamos "apartar" estas dependencias, lo que se hace comúnmente con stubs.
getPins
.open
.Observer
y lo conectamos al componente que estamos probando.Un desafío frecuente en JavaScript es asegurar que un objeto no modifique el original al pasarse por referencia. Usamos un truco para tener una nueva copia:
const nuevaCopia = JSON.parse(JSON.stringify(objetoOriginal));
Esto garantiza que cualquier nivel de anidación en tus objetos JS no afecta al original.
Una vez que nuestros stubs están creados, es importante asegurar que nuestras pruebas unitarias están configuradas correctamente:
Este enfoque estructurado no solo mejora la robustez de tus pruebas, sino que aumenta la confiabilidad de tu aplicación en entorno de producción. Las pruebas unitarias, cuando están bien estructuradas, no solo detectan errores más rápidamente, sino que facilitan el mantenimiento del código a largo plazo. ¡Sigue explorando y afina tus habilidades en pruebas unitarias!
Aportes 2
Preguntas 1
Tengo que compilar varias veces para que me tome las ultimas pruebas agregadas. Esto es normal? A quien más le pesa?
Hay un error en el .html de esta clase y es que intenta coger un formulario donde no lo hay.
<form [formGroup]="pin.formGroup">
<mat-list-item *ngFor="let asset of pin.assets">
<button (click)="openUrl(asset.url)" mat-mini-fab color="accent">Go</button>
<mat-form-field>
<mat-checkbox [formControlName]="asset._id" labelPosition="before">{{ asset.title }}</mat-checkbox>
</mat-form-field>
</mat-list-item>
</form>
Si te fijas en pin que le devolvemos mokeado no hay propiedad formGroup y por lo tanto dentro no va a haber ningun formControl que se llame como el id del asset . para solucionar esto hice es quitar el formControlName del mat-checkbox ya que sino me fallaba al compilar el test.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?