[MÚSICA] [MÚSICA] Bien. Comenzaremos por ver un poco lo que va a ser el desarrollo de próximos videos que toquen este tema del testing, ¿no? Que vamos a dedicar dos, tres tutoriales más. Vamos a comenzar a testear lo que you hicimos, que es el modelo de bicicleta, es decir, este que ande el buscador, el eliminado, algún listado. Y es cierto que no es un curso de testing, por eso no lo vamos a hacer exhaustivo ni vamos a hablar de tantos principios de lo que es el testing, sà buenos lineamientos generales para orientarte que te permitan avanzar, ¿no? Que tengan cierto criterio en qué tener en cuenta. Cuando cerremos este tema del modelo, del testing del modelo de la bicicleta, vamos a pasar a testear lo que es la API, vamos a testear los request que tiene una forma o algunas técnicas relativamente especiales, más que nada por el tema del asincronismo, ¿no? Eso que you vimos en el módulo anterior, es decir, que vamos a ejecutar la función de traernos alguna información, pero eso demora algún tiempo que no para. Entonces, bueno, ¿cómo lidiamos con eso al momento de testear? you que deberÃamos esperar a que termine para ver si el resultado esperado es el que obtuvimos. Y luego, una vez que terminemos eso, lo que vamos a hacer es introducir you Mongo, ahà sà el core de este módulo 2. Y vamos a testear lo mismo en nuestro modelo y nuestra API con Mongo. Por un lado, vamos a introducir Mongo, vamos a agregar los test, vamos a ir modificando nuestro modelo y nuestra API para que se adopten esta nueva forma del test. Y a partir de ahÃ, vamos a ir desarrollando nuestro modelo, you trabajando con test y con Mongo, agregándole nuevas funciones. Y vamos a empezar a hacer los test antes del desarrollo y el avance de nuestro modelo, como una especie de TDD, o TDD directamente, no como una especie, sino propiamente TDD. Dicho esto, con este orden en mente, comencemos con nuestro modelo. Primero, vamos a agregar una carpeta, models, vamos a agregar bicicleta_test .spec.js, esa es la sintaxis final. Y aquà lo primero que vamos a hacer es traernos el, el módulo de bicicleta. [SONIDO] Aquà you nos sugiere models, bicicleta, perdón, falta acá, necesito poner una más, bicicleta. Y ahora lo que podemos comenzar a hacer es hacer simplemente un primer test para probar de el método allbicis, este que está aquÃ, y vamos a chequear que el allbicis, mientras no hagamos nada, arranca vacÃo. ¿Está bien? Entonces, ¿cómo funciona Jasmine con esto de Behavior-driven development o programming? Generamos un describe que va a ser como pensarlo como un grupo de testing, de test, que va a ser foco en, es un criterio, ¿no? Debemos hacer foco en algún comportamiento puntual. En este caso, el método allbicis, o que todas las bicicletas, la lista comienza vacÃa. Hay muchas formas y criterios para escribir los nombres. Yo voy a poner el nombre del, del método en el describe para que quede claro qué es lo que estoy testeando, es importante aquà la claridad. Luego, le pasamos una función. Esto es asà como se escriben las funciones en el nuevo Mac 6, se conoce como lambda, entre paréntesis los parámetros, la flecha, que hace las veces como de la función, y entre llaves, el cuerpo. Y después definimos la otra palabrita es it, que es qué es lo que quiero probar. Y acá vamos a ponerle que bicicleta.allbicis comienza vacÃa. De vuelta, pasamos un lambda, y aquà le vamos a agregarle el test. Para eso, vamos a usar la palabra expect, que es qué es lo que estamos esperando, que es bicicleta, y acá vamos a ponerle que .allbicis.length .tobe.0. Bien. Vamos a probarlo. Aquà podemos hacer npm test, y lo ejecuta, o podemos hacer también Jasmine y la ruta. El resultado es el mismo. Solamente que cuando hagamos npm test, va a ejecutar los test que tengamos, todo lo que tengamos dentro del expect, y de otra forma elegimos exactamente el archivo que queremos. Bien. Aquà lo que nos está diciendo es que el expect, expected 2. tobe.0, o sea, que el resultado de el tamaño de allbicis es 2, y deberÃa ser 0. FÃjate cómo lo muestra, bicicleta .allbicis comienza vacÃa, message, esto, vamos a revisar por qué. Bueno, fácilmente, nos damos cuenta que aquà estábamos agregando you dos bicicletas por default. Vamos a comentar esto porque quizás pues, perdón, después lo usemos. Models, bicicletas, acá está. you lo hemos comentado. Vamos a volver a la doble pantalla. Bueno, probémoslo de vuelta. Ahà está. FÃjate que dice un expect, cero failures. you el puntito verde y cuánto tardó el proceso. Asà que you testeamos que todas las bicicletas, la lista de las bicicletas, comienza en 0. Vamos ahora a testear el, el App que agregue, ¿no? Quiero que agregue, como dice, como se esperarÃa que agregue la bicicleta que nosotros estamos pasándole, ¿no? Vamos nuevamente, [SONIDO] bicicletas.all, vamos a poner acá, agregamos una, you sabemos que son bicicletas, asà que no hace falta aclarar mucho más. Y aquà en el it vamos a hacer dos cosas. Lo primero que podemos hacer es testear nuevamente que bicicletas es 0. A veces suelo hacer esto por si esto que te decÃa antes, ¿no? Que comentábamos anteriormente, si hubo algún test previo que modificó la lista de bicicletas, me puede llegar a tirar un error más adelante cuando chequee la cantidad que quede finalmente y demás, me puede quedar un error. De esta manera, si yo you sé que es 0, lo que voy a pedir, acabo de hacer el add, al final tiene que ser 1. ¿Está bien? Entonces, chequeo la app, lo que serÃa como la precondición, es decir, cómo está el estado previo y cómo es el estado posterior. Entonces, vamos a crear una bici, you que estamos, usemos, para esto me irá a servir. Creemos una bicicleta y se la agregaremos, bicicleta.add(a). Entonces, pedimos que ahora tenga 1, y vamos a pedir [SONIDO] que la primer posición, es decir, el único que hay, sea la bicicleta que acabamos de agregar. [SONIDO] Y ha pasado correctamente. FÃjate que si le ponemos 2, nos activa un error, ¿no? Vamos a correrlo de vuelta. Perfecto. you el add funciona bien. Vamos ahora a probar, si te parece, el findby. [SONIDO] Bicicleta. findbyId, lo tenÃamos por acá, éste, [AUDIO_EN_BLANCO] Y vamos a hacer un it, que el findbyId debe devolver la bici con Id 1. Supongamos que vamos a buscar por ese Id. [SONIDO] Bien. Entonces, vamos de vuelta a asegurarnos que la lista comienza vacÃa. Esto se puede hacer de diferentes formas. A mà me resulta cómo. Hay otros que se preocupan por cómo está la colección, y simplemente la usan y you. Me resulta más cómo, más que nada, por la claridad. you sé que estaba vacÃa, listo, y acá agrego lo que necesito y chao. Sin tanta, sin tantos supuestos. Bien. Entonces, vamos a crear una bici, vamos a crear dos bicicletas, una con Id 1, otra con Id 2, abici2 vamos a ponerle. Las vamos a agregar, bicicleta.add abici y abici2. Y vamos a hacer que targetbici sea igual a bicicleta.findbyId 1, y acá vamos a pedirle todas las cosillas que nos interesan. Básicamente, que targetbici.Id .tobe.1, para que no sea ninguna otra, y que color sea igual a abici.color y modelo, modelo sea el mismo. Vamos a cambiarle esto para que asegurarnos que esto no, no se modifique, ¿no? Montaña. [SONIDO] Bien. Vamos a correr el expect. Falló. ¿Qué pasó? FÃjate que dice que la bicicleta debe devolver la bici con Id 1, Expect 1, tobe 0. Esto puede ser que no sea del todo claro, es cierto, es cierto. Lo que podemos usar esto para leer, fÃjate que acá dice, UserContext.it, o sea, donde se está corriendo esto es en la lÃnea 23, columna 43. Si nos paramos ahÃ, uno puede ver que es esta lÃnea, es decir, que la bicicleta, la colección, you comienza con un elemento, y ese elemento con el que comienza es éste, el que agregamos acá. Por casualidad no se reseteó. O sea, se reseteaba pues de la corrida, pero aquà no. Entonces, eso lo estamos, lo estamos perdiendo. Tal es asÃ, fÃjate que acá, si bien tenemos el Id repetido, el find devuelve un elemento. Ese elemento que está devolviendo, fÃjate que acá nos dice que devolvió rojo, es decir, de la bicicleta anterior. Entonces, ¿cómo podemos hacer para que esto? Digamos, lo que me gustarÃa hacer, y voy directo al grano, asà no le dedicamos tanto, tanto tiempo a esto. Lo que queremos hacer es resetear de alguna manera la colección de las bicicletas que tiene entre cada test, es decir, blanquearla. Para ello, podrÃamos hacer un proceso acá que elimine todas las bicicletas de la colección o igualar la colección al principio de cada test, con una lista vacÃa. Pero todo eso que nos generarÃa repetición de código, es decir, lo voy a escribir una vez. Total, prefiero que quede bien claro, deberÃamos hacer esto, deberÃamos hacer esto. Y en los próximos test que vayamos agregando, siempre hacer esto. ¿Está bien? Lo de inicializar la colección como vacÃo. Todo eso que nos genera cierta repetición de código Jasmine lo resuelve a través de un método que se llama beforeeach, que lo que hace es, le tenemos que pasar una función, es ejecutar esto antes de cada test. Entonces, acá antes de cada test, haremos allBicis igual corchete vacÃo. Y ahà fÃjate que you está, you está funcionando. Bien. Nos quedarÃa probar el removebyId, te lo dejo para que lo resuelvas vos, y pasemos enseguida a trabajar sobre el API que ahà you se pone un poco más interesante el tema del testing. [MÚSICA] [MÚSICA]