3 min to read
Unit testing con rxjs
Unit testing & rxjs operators
Buenasss hemos regresado!! felíz 2021! mejor tarde que nunca.. y siii estrenamos este año con un pequeño post sobre lo que nos encanta escribir: unit testinggggggg A esta altura nos encanta daleeeeee que se
Voy a seguir un poco mas dando ejemplos sobre Jasmine, peeeeero proximamente estare viendo de migrar a Jest, asi que atentisssss a esoooo
Bueno yyyy vamos a lo que nos compete…como siempre, la idea es seguir haciendo post pequeños que nos guste leer, concretos, cortitos, simplessss asi que vamos con esa! Hoy quiero apuntar a los tests con ciertos operadores rxjs como el concatMap y desmentir algunos mitos
concatMap
Este operador según la definición “*concatMap does not subscribe to the next observable until the previous completes*” , es decir, concatena *secuencialmente* nuestras suscripciones, suponiendo que si la primera o alguna de ellas falla o está empty, no continuará la secuencia y se frenará.
Veamos un ejemplo de esto, en nuestro componente podemos tener llamadas concatenadas, conceptualmente hablando seria algo como:
this.service
.method()
.pipe(
concatMap(() => {
return this.service2.method();
})
)
.pipe(
concatMap(() => {
return this.service2.method2();
})
)
.pipe(
concatMap(() => {
return this.service3.method();
})
)
.subscribe(
() => {
console.log('josha!!!');
},
(error) => {
console.log('upsis');
}
)
No importa si queremos concatenar metodos del mismo servicio o de diferentes servicios o bla bla.
Lo que sí nos importa es que, para cuando hacemos el unit test de un caso asi sepamos lo que podemos hacer:
-
No es necesario ejecutar el test en una zona asíncrona como podría pensarse (usando fakeAsync o async), o aplicando marble testing, entonces se puede testear de manera síncrona y sencilla.
-
Es importante que entendamos la definición, “no continuará si falla alguna de las suscripciones”. Esto es lo mas importante. Si en nuestros tests tenemos tests doubles (mediante servicios stubbeados) y/o Spies, tenemos que tener en cuenta que los metodos de nuestros servicios que están involucrados en esa concatenación, DEBEN DEVOLVER ALGOOO
En este caso debemos tener cuidado porque si cualquiera de esos metodos no devuelve un observable con alguillo: que secuencia? no hay secuencia.
Para verlo mejor con el ejemplo anterior seria que en nuestro mock, stub o spy tengamos en el return de esos metodos algo como
return of('holis')
ó aunque sea:
return of({})
porque si solamente devolvemos un observable pelado
return of()
al hornooooo al hornoooooooo!!
bue che tampoco para tanto, pero no va a andar ni pa delante ni pa tras, esos concatMap van a quedar en el eterno resplandor de una mente sin recuerdo, es decir, en el eterno limbo
Asi que bueno, eso es todo amigos, espero que les haya servido y que les haya gustado chau!