Yeda AI Tips · #071

English

Verifica los cuatro estados de tu UI

Solo estás probando uno de los cuatro estados de tu UI. Casi toda pantalla que habla con una red o una base de datos pasa por el mismo ciclo de vida: carga, puede volver vacía, puede fallar y — si todo sale bien — renderiza el éxito. La mayoría de los tests de widgets y componentes verifican exactamente uno de esos cuatro: el render feliz. Eso es 25% de cobertura de los estados que tus usuarios realmente ven.

Por qué el camino feliz no es toda la app

El render de éxito es el estado que miras todo el día mientras desarrollas, así que es el que rara vez se rompe. Los bugs que sufren los usuarios viven en otro lado:

Nada de esto es exótico. Todo esto llega a producción constantemente, porque ningún test puso al componente en ese estado.

Las cuatro verificaciones

EstadoQué verificarCómo alcanzarlo en un test
LoadingEl spinner/skeleton es visible; el contenido noRenderizar antes de que la petición mockeada se resuelva
VacíoEl mensaje de estado vacío y su CTA se renderizanMockear la petición para devolver [] / sin elementos
ErrorEl mensaje de error se renderiza; existe el control de reintentoMockear la petición para devolver un 500 o un error de red
ÉxitoLos datos se renderizan; el spinner y el error desaparecieronMockear la petición con datos de fixture realistas

Cuatro estados, cuatro tests. Cada uno son pocas líneas una vez que el mocking de peticiones está listo.

Cómo se ve en código

Con React Testing Library y MSW, el caso de error es un override de un solo handler:

test("handles server error", async () => {
  server.use(
    http.get("/api/items", () =>
      HttpResponse.json({ error: "boom" }, { status: 500 })
    )
  );
  render(<ItemList />);
  expect(await screen.findByText(/something went wrong/i)).toBeInTheDocument();
  expect(screen.queryByRole("progressbar")).not.toBeInTheDocument();
});

Dos detalles hacen el trabajo pesado:

La misma forma funciona en todas partes: en Flutter, tester.pumpWidget() más find.byType(CircularProgressIndicator) para el loading, luego avanzas el future con pump y verificas el Text de error; en cualquier stack, el patrón es controla la fuente de datos, verifica el render.

Trucos avanzados

Recursos

¿Construyendo una funcionalidad con IA? Yeda AI diseña, audita y entrega sistemas LLM de producción.

Habla con nosotros · Lee el blog · Read in English