[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]