Implementar pruebas en un proyecto de software es un paso muy importante en nuestra carrera como desarrolladores. Al inicio vamos a estar trabajando en proyectos personales y tal vez veamos el proceso de pruebas como una pérdida de tiempo más que como un valor agregado, pero te voy a dar un spoiler:en un proyecto profesional NO vamos a ser los únicos involucrados.
Así es, vamos a trabajar en equipo.
Al inicio del proyecto de deben haber definido los requerimientos que el producto final debe cumplir. Las pruebas de software son un proceso que nos ayuda a validar que estos requerimientos se vayan cumpliendo durante el desarrollo y no esperar a que el producto esté terminado para verificar si funciona como esperamos que lo haga.
Son pruebas realizadas a cada uno de nuestros componentes de manera aislada. En cada prueba unitaria logramos conocer si el componente se comporta de la forma que especifica el diseño inicial.
Realizar pruebas unitarias es bastante sencillo, pero debemos tener cuidado por que el componente puede estar funcionando muy bien aislado de los demás, pero cuando interactúa con otros se puede romper.
Son las pruebas que realizamos a nuestros componentes interactuando entre sí, en este tipo de pruebas vemos como los datos fluyen de un componente hacia otro y como los componentes que estamos integrando reaccionan a las interacciones.
Las pruebas End to End son realizadas pensando un poco más del lado del usuario final y requieren de un conjunto de herramientas más completas como Cypress o Puppeteer que nos proveen un navegador para hacer las interacciones con la aplicación. En este tipo de pruebas hacemos un uso total de la aplicación como lo haría un usuario y se observa el flujo de los datos desde la capa del frontend hasta el almacenamiento de los datos de los usuarios.
El test coverage nos indica qué porcentaje de nuestro código está siendo probado. No es recomendable tener un 100% de coverage por que es casi imposible probar cada línea de código que escribimos, en proyectos profesionales se recomienda un coverage mínimo del 70%.
Jest es una de las herramientas más populares en el ecosistema de JavaScript para implementar pruebas. Mira The State of JavaScript.
Jest es un test runner basado en Node que nos brinda todo un conjunto de herramientas en un solo lugar, lo podemos usar para realizar pruebas en nuestras aplicaciones tanto del lado del backend como del lado del frontend.
Aunque Jest nos brinda jsdom como herramienta para tener las funcionalidades de un browser en el entorno de Node, para realizar pruebas a nuestras aplicaciones de React es recomendable usar herramientas extras como Enzyme o Testing Library que nos permiten acceder de una forma más óptima a los elementos HTML.
Más allá de las herramientas que usamos, debemos entender los conceptos detrás de las pruebas de software y por qué es importante aprender además de implementarlas a entenderlas ya que también nos vamos a encontrar con pruebas que otras personas escriban.
Te invito conocer a profundidad la herramienta que usas para realizar pruebas en tus proyectos, esto te dará mucha ventaja cuando comiences a trabajar con otra por algún motivo debido a que son muy similares en su estructura.
Hay algún recurso que puedas compartir acerca Testing Library?
e2e testing