IIC2513-2021-1 / projects

Repositorio oficial para los proyectos de ambas secciones del periodo 2021-1 del curso PUC IIC2513
14 stars 6 forks source link

Testing on Multiple fetches en una vista #131

Open lucas-valenzuela opened 3 years ago

lucas-valenzuela commented 3 years ago

Hola! con mi equipo hemos seguido todos los pasos de la cápsula y nos ha funcionado casi todo bien, exceptuando unas vistas que tenemos en donde hacemos dos fetchs (por ejemplo, somos Bokkkers y tenemos una vista en que hacemos un GET a la info de un libro y después un GET a las reviews que se han hecho a ese libro). He buscado bastante en internet y he encontrado soluciones como usar mockResponses o once en vez de mockResponse, pero ninguna nos está funcionando (al hacer render solo se retorna nuestra navbar, sin la info de los gets). Estaríamos muy agradecidos si alguien nos pudiera dar un insight sobre cómo seguir, puesto que probablemente habrán otros equipos que se enfrentarán a la misma duda.

Muchos saludos, Lucas

sivicencio commented 3 years ago

Hola @lucas-valenzuela.

¿Cómo están haciendo los dos fetches? ¿Uno inmediatamente después del otro? ¿El segundo en base a alguna condición previa que debe cumplirse? Depende bastante de eso la forma de abordarlo.

En general, para cualquier cambio que signifique un re-render de un componente, debería llamarse a act(). Podrías ver si te funciona repitiendo la línea que llama a esta función con async/await.

lucas-valenzuela commented 3 years ago

Hola profe!

En la vista, un fetch se hace uno después de otro, no hay ninguna condición que deba cumplirse. Primero se hace un fetch al GET de la info de un libro y después un fetch al GET de las reviews de ese libro.

Probé con lo que me dijo de agregar un segundo act después del renderer.create y ahora me funciona! Lo hice con fetch.mockResponses de esta forma:

Lo hice con fetch.mockResponses de esta forma:

fetch.mockResponses(
          [JSON.stringify(bookInfo)], 
          [JSON.stringify(bookReviews)]
);

Muchas gracias por su respuesta, Lucas

sivicencio commented 3 years ago

Súper bien entonces. El package jest-fetch-mock debería tener más flexibilidad para retornar responses también, probablemente en base a la URL que le pasas, pero para el caso que mencionas, la solución con mockResponses debería ser suficiente.