Reject y resolve
Clase 17 de 25 • Curso de JavaScript Testing con Jest 2019
Contenido del curso
Clase 17 de 25 • Curso de JavaScript Testing con Jest 2019
Contenido del curso
Henry Tabima Giraldo
Mariano Villarreal
Daniel Páez
Oscar Barajas Tavares
MAURICIO PUERTA OSPINA
Markoz Peña Mendez
JUAN FELIPE CONTRERAS DELGADO
Miguel Angel Reyes Moreno
Alejandro González Reyes
Facundo Nicolás García Martoni
Carlos Delgado
Alejandro González Reyes
Daniel Páez
Oscar Barajas Tavares
Juan Castro
Edgar Lopez Arroyo
Jorge Méndez Ortega
Wilson Alejandro Gonzalez Gaitan
Juan Esteban Galvis
Victor Ignacio Casas Cabezas
Naldo Duran
Me pareció mejor manejar el reject de esta manera
test('Rechaza con un error', () => { return expect(Promise.reject(new Error('Error'))).rejects.toThrow('Error') })
por las dudas lo agrego a los apuntes (?
Platzi, los amo, pero realmente creo que este curso no sigue su ultima metodologia orientada a proyectos, sugiero renovar este curso integrando todos estos métodos de jest en un proyecto web que vayamos construyecto
Ya lo encuentras en algunos cursos que hemos lanzado, también en los que están en la escuela de JavaScript.
@gndx Oscar Barajas, nos puedes indicar los cursos que tienen Jest inmersos en sus pruebas unitarias?
Si alguien quiere adoptar fetch puede hacer uso de isomorphic-fetch que nos permite hacer uso de fetch en el contexto de servidor(node) : )
**promises.js **
export const getDataFromApi = url => { return fetch(url) .then(res => res.json()) .then(data => data) .catch(err => console.error(err)); }
**promises.test.js **
import { getDataFromApi } from '../promises'; describe('GET /rickandmortyapi.com/api/character', () => { const API = 'https://rickandmortyapi.com/api/character/'; test('Fetching Data', done => { getDataFromApi(API) .then(data => { expect(data.results.length).toBeGreaterThan(0); done(); }); }); });
Es básico pero suficiente para practicar.
Solo para que quede claro: Oscar dice 'promais' pero se pronuncia 'promes' (con acento gringo claro jaja).
Tengo una duda, si hago una petición a
https://rickandmortyapi.com/api/character/215454545
este me responde con un objeto cuyo error es que el personaje no se ha encontrado.
Como puedo interpretar esto, como una promesa rechazada o una promesa resuelta pero con el detalle de que no se ha encontrado data alguna.
Y como puedo testear esto en JEST
Respondiendo a tu primera pregunta, debes interpretarlo como una promesa resuelta con el detalle de que no se encontraron datos, ya que efectivamente el servidor retornó un objeto válido
test('Error porque el personaje no existe', (done) => { const apiUrl = "https://rickandmortyapi.com/api/character/131990"; getDataFromApi(apiUrl) .then(data => { expect(data).not.toBeDefined(); done(); }); });
Trate de asociar este ejemplo con la petición de una API a un recurso que no existe y retorna un codigo de estado 404. Sin embargo no logro hacer que la prueba pase.
describe('Verificar si la petición a una API se rechaza', () => { test('¿Falla la API al solicitar el siguiente recurso?', async (done) => { const URL = 'https://rickandmortyapi.com/api/character/2454' return expect(await getDataFromAPI(URL)).rejects.toBe(404) }) })
Espero y puedan ayudarme
Hoy un amigo y programador me dijó que cuando hacemos testing de verdad
Nosotros programamos primero el test que va a pasar nuestro componente, nuestro archivo de código y despues creamos el componente
¿Cómo ven esa afirmación en la práctica?
Desarrollo guiado por pruebas o mejor conocido como TDD es la metodología que te invita a crear primero las pruebas antes de tu código.
Como dice el profe, lo que mencionas lo conocemos como Test Driven Development. Y es una gran forma de trabajar. Puedes aprender un poco más en este tutorial:
:point_right: https://platzi.com/blog/que-es-y-como-funciona-tdd/
También está el Curso Básico de Testing en Java. A pesar de ser con Java, la teoría e incluso los ejemplos prácticos te pueden ayudar para aplicar TDD en cualquier lenguaje:
:point_right: https://platzi.com/clases/testing-java/
test("Resuelve un Hola", () => { return expect(Promise.resolve('Hola')).resolves.toBe('Hola'); }); test("Rechaza con un error", () => { return expect(Promise.reject('Error')).rejects.toBe('Error'); });```
mmm creo que no le veo mucha funcionalidad a esta parte
Creo que si porque las cosas mínimas son las que cuestas a la hora de hacer algún código
En Frontend no tanto pero de pronto en tema de peticiones (Por ejemplo Backend con Mongo para hacer get, post, pull, etc) si se utiliza lo de resolve y reject para responder o devolver un error.
Por qué acá no se uso done()?
.