Callbacks
Clase 15 de 25 • Curso de JavaScript Testing con Jest 2019
Contenido del curso
Clase 15 de 25 • Curso de JavaScript Testing con Jest 2019
Contenido del curso
Javier Cestau
Juan Esteban Galvis
Mariano Villarreal
Antonio Madrid
Juan Burns
Johnny J. Huirilef Millán
Jesus Africano
Edward Fernandez
Edgar Lopez Arroyo
JUAN FELIPE CONTRERAS DELGADO
fabian miliani
Carlos Delgado
Jorge Eliecer Rangel Jimenez
Alejandro González Reyes
Javier Fuentes Mora
Markoz Peña Mendez
Jonathan Andres Vasquez Valle
Naldo Duran
Paolo Joaquin Pinto Perez
Creo que quedaría mejor explicado si se usara el setTimeout, ya que la funcion creada en esta clase es lineal por lo que no se hace ningun callback asincrono
Intenté y es igual:
Callback.js
export function AsincFunc (callback) { setTimeout(callback('Hola desarrolladores!'), 1000) }
Callback.test.js
test('Callback 2', (done) => { function otherCallback(data) { expect(data).toBe('Hola desarrolladores!'); done(); } AsincFunc(otherCallback) });
Recomiendo hacer tests con los algoritmos asíncronos del curso de introducción a javascript
Esta parte es bastante confusa.
Vamos paso por paso para que puedan entenderlo todos, porque puede ser confuso si no se consolea y se observa el orden:
1-Importamos la funcion callbackHell 2-dentro de test declaramos la funcion "otherCallback" 3-invocamos a callbackHell y le damos "otherCallback" para que el la invoque 4-callbackHell le envía a otherCallback un texto 5-otherCallback cuando se ejcuta compara ese texto recibido con "Hola Javascripters" 6-done() Avisamos a Jest que el test terminó.
// Leanlo tranquilos, pero ese es el orden de ejecución, y está perfecto, saludos!.
No pude entender para que se utiliza “done”
El done es la forma de informarle a jest que se resolvió la función asíncrona, intenta comentado la linea del done y comprobaras que falla el test porque se queda esperando que la función resuelva.
Lo que pasa es que Jest indica que una prueba terminó cuando llega al final de la ejecución. Cuando estamos trabajando con funciones asíncronas uno no sabe realmente cuándo termina la llamada, por lo que el método done() que utilizamos le va a indicar a Jest que debe esperar hasta que el callback done se halla llamado antes de terminar la prueba.
import { callbackHell } from '../callback.js'; describe("Probando un callback", () => { test("Callback", (done)=> { function otherCallback(data) { expect(data).toBe("Hola JavaScript"); done(); } callbackHell(otherCallback); }); });```
:)
Buenos dias Oscar , queria saber como probamos una fucnion como esta:
let array = [ 2,3,4,5,6,7,8,44] export const arrayMultiplicado = array.map( function(element){ return element*2; })
Hola podrías probar de la siguiente manera:
test('Debe multiplicar por 2 cada elemento', () => { const array = [2,3,4,5,6,7,8,44]; expect(arrayMultiplicado).toEqual(array.map(e => e * 2)); });
callback.js
export const callbackHell = (callback) => { callback("Hola JavaScript"); };
callback.test.js
import { callbackHell } from "../callback"; describe("Probando un Callback", () => { test("Callback", (done) => { const otherCallback = (data) => { expect(data).toBe("Hola JavaScript"); done(); }; callbackHell(otherCallback); }); });
Después de un cierto tiempo de práctica, comprendí el porque de done() y la declaración de la afirmación dentro del cuerpo del callback pasado como parametro a la función a testear
No entiendo en que seria funcional esto?
Cuando estas construyendo tu API en este caso en express, todo tu código es asincrono.
La captura de datos a una API es asincrona, así que para entender mejor la aplicación de estos test, hice una prueba llamando a la api de pokemon, les comparto el ejemplo:
//callback.js import axios from 'axios' export const capturarPokemon = async (callback) => { let data = await axios.get("https://pokeapi.co/api/v2/pokemon/1") let nombrePokemon= data.data.forms[0].name return callback(nombrePokemon); };
Ahora el archivo de testing
//callback.test.js describe("Probando llamado a api", () => { test("Debe retornar nombre de pokemon", (done) => { const getPokemonName = (nombrePokemon) => { expect(nombrePokemon).toBe("bulbasaur"); done(); }; capturarPokemon(getPokemonName); }); });
Si van a usar axios para hacer la prueba deben correr antes el comando:
npm i --save axios
.
Ya que debemos agregar el done() para avisarle que nuestra funcion callback termino, entonces cuando comenté el done() del la funcion, este fue el output: